復(fù)數(shù)計(jì)算器課程設(shè)計(jì)

上傳人:jun****875 文檔編號(hào):23766460 上傳時(shí)間:2021-06-10 格式:DOC 頁(yè)數(shù):26 大?。?99.91KB
收藏 版權(quán)申訴 舉報(bào) 下載
復(fù)數(shù)計(jì)算器課程設(shè)計(jì)_第1頁(yè)
第1頁(yè) / 共26頁(yè)
復(fù)數(shù)計(jì)算器課程設(shè)計(jì)_第2頁(yè)
第2頁(yè) / 共26頁(yè)
復(fù)數(shù)計(jì)算器課程設(shè)計(jì)_第3頁(yè)
第3頁(yè) / 共26頁(yè)

下載文檔到電腦,查找使用更方便

9.9 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《復(fù)數(shù)計(jì)算器課程設(shè)計(jì)》由會(huì)員分享,可在線閱讀,更多相關(guān)《復(fù)數(shù)計(jì)算器課程設(shè)計(jì)(26頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、目 錄 1 題目?jī)?nèi)容及設(shè)計(jì)要求 1 2 總體設(shè)計(jì) 1 2.1 總體功能框圖 1 2.2 類的設(shè)計(jì)說(shuō)明 1 2.3 主要算法流程圖 1 3 程序清單及注釋 1 4 運(yùn)行結(jié)果與分析 1 5 總結(jié) 2 6 參考文獻(xiàn) 2 1 題目?jī)?nèi)容及設(shè)計(jì)要求 題目17 復(fù)數(shù)計(jì)算器 內(nèi)容及要求: (1)所設(shè)計(jì)的復(fù)數(shù)計(jì)算器可以進(jìn)行+ - * += -= *= ++ -- >= <= == !=運(yùn)算符,其中 >= <=是針對(duì)復(fù)數(shù)的模進(jìn)行運(yùn)算。 (2)設(shè)計(jì)輸入重載函數(shù),要求能接收從鍵盤輸入a+bi形式的復(fù)數(shù),在程序中可以識(shí)別 出實(shí)部虛部并正確賦值。 (3) 設(shè)計(jì)計(jì)算器

2、測(cè)試程序,對(duì)加減法進(jìn)行測(cè)試,要求在兩位數(shù)以內(nèi)進(jìn)行,對(duì)乘法進(jìn)行測(cè) 試,乘法要求為一位數(shù)的運(yùn)算。 (4) 設(shè)計(jì)記錄功能,可以記錄下不同用戶使用計(jì)算器的情況,記錄以文件的形式保存在 計(jì)算機(jī)內(nèi),開(kāi)機(jī)時(shí)要求用戶輸入用戶名,顯示該名戶以前的記錄。用戶記錄用包括:做了多 少次加減法、乘法、進(jìn)行測(cè)試的次數(shù),后3次的測(cè)試平均分等,在退出計(jì)算器程序時(shí)用心的 用戶記錄代替原有的記錄。 2 總體設(shè)計(jì) 2.1 總體功能框圖 根據(jù)題中任務(wù)的功能,首先要搞清復(fù)數(shù)的運(yùn)算法則, 并使用c++語(yǔ)言表達(dá)。復(fù)數(shù)包含實(shí)部與虛部,如何將這兩部分表達(dá)出來(lái)也使關(guān)鍵 定義一個(gè)復(fù)數(shù)類complex。 聲明所需成員函

3、數(shù)和友元函數(shù)對(duì)各運(yùn)算符進(jìn)行重載。 定義各成員函數(shù)。 定義主函數(shù),實(shí)現(xiàn)對(duì)整個(gè)程序的控制。 編譯、運(yùn)行并調(diào)試 2.2 類的設(shè)計(jì)說(shuō)明 class CComplex //定義命名空間NameCComplex { private: double Real,Image; public: CComplex(double real=0,double image =0) //構(gòu)造函數(shù) { Real=real;Image=image; } friend istream & op

4、erator>>(istream &is,CComplex &com ); //重載輸入 friend ostream & operator<<(ostream &os,CComplex &com); //重載輸出 CComplex operator+(CComplex &com); //加法重載 CComplex operator-(CComplex &com); //減法重載 CComplex operator*(CComplex &com);

5、 //乘法重載 CComplex operator+=(CComplex &com); //加法賦值重載 CComplex operator-=(CComplex &com); //減法賦值重載 CComplex operator*=(CComplex &com); //乘法賦值重載 CComplex operator++(); //自加 CComplex ope

6、rator--(); //自減 double mod (void); //求復(fù)數(shù)的模 int operator>(CComplex &com); int operator<(CComplex &com); int operator!=(CComplex &com); int operator==(CComplex &com); }; 2.3 主要算法流程圖 開(kāi)始 聲明一個(gè)complex類,并定義

7、double,real,image; 聲明類的函數(shù),構(gòu)造函數(shù),加減乘除和取模運(yùn)算 c.real=real+c2.real;c.imag=imag+c2.imag; c.real=real-c2.real;c.imag=imag-c2.imag; c.real=(real*c2.real+imag*c2.imag)/a;c.imag=(imag*c2.real-real*c2.imag)/a c.real=real*c2.real-imag*c2.imag;c.imag=real*c2.imag+imag*c2.real; Sqrt(real*real=imag*imag); 輸出

8、c1,c2,c1+c2,c1-c2,c1*c2,c1/c2, ∣c1∣的值 終止 。。。。。。 圖2-1 算法流程圖 3 程序清單及注釋 #include #include #include #include #include #include //#define EPS len-5 // 定義精度常數(shù) using namespace std; namespace NameCComplex // 定義命名

9、空間 NameCComplex { /*----------------------------------------------------------------------- |部分A: | 復(fù)數(shù)類 CComplex 的聲明和定義,以及結(jié)構(gòu)體類型 用戶 User 的定義 | ----------------------------------------------------------------------*/ /*--------------------------------- | 復(fù)數(shù)類 CComplex 的聲明

10、 --------------------------------*/ class CComplex { private: double Real, Image; // 分別為復(fù)數(shù)的實(shí)部和虛部 public: CComplex(double real=0, double image=0) // 構(gòu)造函數(shù) { Real = real; Image = image; } friend istream & operator >> (istream & is, CComplex & com); // 重載輸入

11、 friend ostream & operator << (ostream & os, CComplex & com); // 重載輸出 CComplex operator + (CComplex & com); // 加法重載 CComplex operator - (CComplex & com); // 減法重載 CComplex operator * (CComplex & com); //

12、乘法重載 CComplex operator += (CComplex & com); // 加法賦值重載 CComplex operator -= (CComplex & com); // 減法賦值重載 CComplex operator *= (CComplex & com); // 乘法賦值重載 CComplex operator ++ ();

13、 // 自加 CComplex operator -- (); // 自減 double mod(void); int operator > (CComplex & com); int operator < (CComplex & com); int operator != (CComplex & com); int operator == (CComplex & com); }; /*----------------------------------

14、-- | 結(jié)構(gòu)體類型 用戶 User 的定義 -----------------------------------*/ struct User { char szName[20]; // 用戶名 int nTime; // 使用次數(shù) int nTest; // 測(cè)試次數(shù) double dlAve; // 平均成績(jī) int nAdd; // 加法次數(shù) int nSub;

15、 // 減法次數(shù) int nMul; // 乘法次數(shù) double dlScore[3]; // 3次測(cè)試得分 } user; /*--------------------------------------------------------------- | 復(fù)數(shù)類 CComplex 的類外定義部分 ---------------------------------------------------------------*/ // 重載運(yùn)算

16、符“++”,實(shí)部與虛部均加 1 CComplex CComplex::operator ++ () { Real++; Image++; return *this; } // 重載運(yùn)算符“--”,實(shí)部與虛部均減 1 CComplex CComplex::operator -- () { Real--; Image--; return *this; } // 求復(fù)數(shù)的模,返回 實(shí)部^2 + 虛部^2 double CComplex::mod() { return Real * Real + Image * Im

17、age; } // 重載運(yùn)算符“>”,比較模的大小 int CComplex::operator > (CComplex & com) { if ( mod() > com.mod() ) return 1; // 若大,則返回 1 else return 0; } // 重載運(yùn)算符“<”,比較模的大小 int CComplex::operator < (CComplex & com) { if ( mod() < com.mod() ) return 1; // 若小,則

18、返回 1 else return 0; } // 重載運(yùn)算符“!=”,分別判斷復(fù)數(shù)的實(shí)部與虛部 int CComplex::operator != (CComplex & com) { if ( *this==com ) return 0; else return 1; } // 重載復(fù)數(shù)的輸入, a+bi 的形式 istream & operator >> (istream & is, CComplex & com) { cout << "輸入復(fù)數(shù):"; char s[80]; is >>

19、 s; // 用字符串的形式接收復(fù)數(shù) int len = strlen(s); // 求出字符串的長(zhǎng)度 int n = 0, sign = 1; // 其中的 n 值 為當(dāng)前從字符串中提取出的數(shù)字,會(huì)在下面的 while 語(yǔ)句中得到確定的值 // sign 為狀態(tài)變量,表示數(shù)值的正負(fù)符號(hào),以輔助辨認(rèn)正負(fù)值 com.Image = com.Real = 0; // 判斷接收的字符串是否合法 for(int k=0; k

20、 if ( (s[k]<0 || s[k]>9) && (s[k]!=+ && s[k]!=- && s[k]!=i) ) { cout << "error" << endl; return is; // 錯(cuò)誤,輸出出錯(cuò)信息并返回 } } // 順序識(shí)別字符串中各字符 for(int k=0; k

21、 // 是符號(hào)位,且 n!=0,即 n 已被賦值(通過(guò)下面的whlie語(yǔ)句),表明當(dāng)前讀取的是虛部的符號(hào) n = 0; // 將原 n*sign 值(帶正負(fù)號(hào)的數(shù)值)賦給實(shí)部后,將 n 清零,準(zhǔn)備下一次繼續(xù)接收并判斷是否為虛部的值 } if ( s[k] == -) // 當(dāng)前字符若為負(fù)號(hào) { sign = -1; k++; // 給符號(hào)標(biāo)志變量 sign 賦值,表示為負(fù)數(shù) } if ( s[k] == +)

22、 // 當(dāng)前字符若為正號(hào) { sign = 1; k++; // 給符號(hào)標(biāo)志變量 sign 賦值,表示為正數(shù) } if ( s[k]==i ) // 若當(dāng)前字符為“i” { if ( k!=len-1 ) // 判斷字符 i 是否為字符串中最后一個(gè)字符 cout << "error\n"; // 如果不是,說(shuō)明復(fù)數(shù)數(shù)據(jù)格式錯(cuò)誤 else com.Image = sign * n; // 是最后一個(gè)字符,復(fù)

23、數(shù)對(duì)象已接收完,用 sign*n 為虛部賦值 break; } while ( s[k]>=0 && s[k]<=9 ) // 當(dāng)前字符若在 0~9 之間,則將數(shù)字字符轉(zhuǎn)換成數(shù)字?jǐn)?shù)值 { n = n * 10 + s[k] - 0; k++; } } if ( s[len-1]!=i && n!=0 ) // 如果最后一個(gè)字符不是 i,表示復(fù)數(shù)對(duì)象內(nèi)只有實(shí)部,沒(méi)有虛部,如:-a com.Real = n * sign; return is; } // 重載復(fù)

24、數(shù)的輸出 ostream & operator << (ostream & os, CComplex & com) { if ( fabs(com.Image)==0 ) // 如果虛部為 0 os << com.Real; // 只輸出實(shí)部 else if ( fabs(com.Real)==0 ) // 如果實(shí)部為 0 os << com.Image << "i"; // 只輸

25、出虛部 else if ( com.Image>0 ) os << com.Real << "+" << com.Image << "i"; // 虛部為正 else os << com.Real << com.Image << "i"; // 如 實(shí)部為 3,虛部為 -6i,就變?yōu)?3 - 6i,而不是 3 + -6i return os; } // 加法重載 CComplex CComplex::operator + (CComplex & com) { CComplex sum; sum.Real =

26、Real + com.Real; // 實(shí)部相加 sum.Image = Image + com.Image; // 虛部相加 return sum; } // 乘法重載 CComplex CComplex::operator * (CComplex & com) { CComplex multi; multi.Real = Real * com.Real - Image * com.Image; // 乘積實(shí)部 multi.Image = Real * com.Image + Image * com.Rea

27、l; // 乘積虛部 return multi; } // 減法重載 CComplex CComplex::operator - (CComplex & com) { CComplex sub; sub.Real = Real - com.Real; // 實(shí)部相減 sub.Image = Image - com.Image; // 虛部相減 return sub; } // 加法賦值重載 CComplex CComplex::operator += (CComplex & com) {

28、 Real = Real + com.Real; // 實(shí)部 Image = Image + com.Image; // 虛部 return *this; } // 減法賦值重載 CComplex CComplex::operator -= (CComplex & com) { Real = Real - com.Real; // 實(shí)部 Image = Image - com.Image; // 虛部 return *this; } // 乘法賦值重載 CComplex CComplex::ope

29、rator *= (CComplex & com) { double nReal = Real * com.Real - Image * com.Image; // 乘積實(shí)部 double nImage = Real * com.Image - Image * com.Real; // 乘積虛部 Real = nReal; Image = nImage; return *this; } // 重載 == 運(yùn)算符,分別比較兩個(gè)復(fù)數(shù)對(duì)象的實(shí)部和虛部 int CComplex::operator == (CComplex & com) {

30、 if ( Real==com.Real && Image==com.Image ) return 1; // 實(shí)部與虛部部分相等,則返回 1 else return 0; } /*---------------------------------------------------------------------------- |部分B: | 測(cè)試函數(shù) void Test(void) | 實(shí)現(xiàn)復(fù)數(shù)的加法函數(shù) void Add() | 實(shí)現(xiàn)復(fù)數(shù)的減法函數(shù) void Sub() | 實(shí)現(xiàn)復(fù)數(shù)的乘法函數(shù) void Mul()

31、 | 實(shí)現(xiàn)復(fù)數(shù)的自加函數(shù) void Add1() | 比較兩個(gè)復(fù)數(shù)的大小函數(shù) void Compare() | 輸出本次用戶使用計(jì)算器的情況記錄 void userprint() | 當(dāng)前用戶使用完計(jì)算器,保存或更新用戶資料函數(shù) void SaveFile() | ----------------------------------------------------------------------------*/ // 測(cè)試函數(shù),隨機(jī)出 10 道運(yùn)算題,可以打分 void Test(void) { user.nTest++; // 用戶測(cè)試

32、次數(shù)加 1 cout << "共10道題,作10以內(nèi)的加減運(yùn)算,滿分 100分:\n"; double real1, real2, image1, image2, real3, real4, image3, image4; // 1 和 2 分別代表兩個(gè)待相加的復(fù)數(shù)的實(shí)部和虛部,3 和 4 則為相乘 CComplex answer, temp; int score = 0; char op; for(int i=0; i<=9; i++) { real1 = rand()%200 - 100; // 產(chǎn)生的隨機(jī)數(shù)是兩位數(shù),可

33、以是正數(shù)或負(fù)數(shù) image1 = rand()%200 - 100; real2 = rand()%200 - 100; image2 = rand()%200 - 100; CComplex a(real1, image1), b(real2, image2); // 用產(chǎn)生的隨機(jī)數(shù)對(duì)象分別初始化兩個(gè)復(fù)數(shù)對(duì)象 real3 = rand()%20 - 10; // 產(chǎn)生的隨機(jī)數(shù)是一位數(shù),可以是正數(shù)或負(fù)數(shù) image3 = rand()%20 - 10; real4 = rand()%20 - 10; imag

34、e4 = rand()%20 - 10; CComplex c(real3, image3), d(real4, image4); op = rand()%3; // 隨機(jī)產(chǎn)生 3 種運(yùn)算符 switch(op) { case 0: answer = a + b; cout << a << "加上" << b << "等于"; break; case 1: answer = a - b; cout << a << "減去" << b << "等于"; break;

35、 case 2: // 乘法運(yùn)算,用實(shí)部和虛部都是 1 位數(shù)的對(duì)象操作 answer = c * d; cout << c << "乘以" << d << "等于"; break; } cin >> temp; // 接收用戶輸入的結(jié)果 if ( answer==temp ) score+=10; // 正確則加 10分 else { cout << "此題做錯(cuò)了\n"; cout << "正確答案為:" << answer << endl; } }

36、 cout << "你的最后得分是:" << score << endl; // 計(jì)算最后 3次的平均分 if ( user.nTest<=3 ) // 若累計(jì)次數(shù)沒(méi)有超過(guò) 3次 { user.dlAve = 0; user.dlScore[user.nTest-1] = score; // 將本次測(cè)試成績(jī)添加進(jìn)記錄中 for(int i=0; i

37、算平均分 user.dlAve = user.dlAve / user.nTest; // 計(jì)算平均分,user.dlAve 從累計(jì)的分?jǐn)?shù) 變成了平均分 } else // 如果累計(jì)測(cè)試超過(guò) 3次 { user.dlScore[0] = user.dlScore[1]; // 最前面的一次記錄將被覆蓋,即:刪除 user.dlScore[1] = user.dlScore[2]; user.dlScore[2] = score; // 將本次記錄添加進(jìn)測(cè)試記錄的尾部 user.dl

38、Ave=0; for(int i=0; i<3; i++) // 計(jì)算最新 3次的平均分 user.dlAve += user.dlScore[i]; user.dlAve = user.dlAve / 3; } cout << "按任意鍵繼續(xù)\n"; cout .flush(); cin.get(); cin.get(); } // 實(shí)現(xiàn)復(fù)數(shù)的加法 void Add() { user.nAdd++; CComplex num1, num2, sum, Zero(0, 0); cout << "

39、加法計(jì)算\n" << "最少輸入兩個(gè)復(fù)數(shù),輸入“0”結(jié)束\n"; cout << "第1個(gè)復(fù)數(shù):"; cin >> num1; // 輸入第 1個(gè)復(fù)數(shù) cout << "第2個(gè)復(fù)數(shù):"; cin >> num2; // 輸入第 2個(gè)復(fù)數(shù) sum = num1 + num2; cout << "第3個(gè)復(fù)數(shù):"; cin >> num1; // 輸入第 3個(gè)復(fù)數(shù) int i = 4; while ( !(num1==Zero) ) {

40、sum = sum + num1; // 實(shí)現(xiàn)復(fù)數(shù)相加 cout << "第" << i << "個(gè)復(fù)數(shù):"; cin >> num1; // 輸入第 i個(gè)復(fù)數(shù) i++; } cout << "結(jié)果是:" << sum << endl; cout << "按任意鍵繼續(xù)\n"; cout.flush(); cin.get(); cin.get(); } // 實(shí)現(xiàn)復(fù)數(shù)的減法 void Sub() { user.nSub++; CComplex num1, num2, s

41、ub, Zero(0, 0); cout << "減法計(jì)算\n" << "最少輸入兩個(gè)復(fù)數(shù),輸入“0”結(jié)束\n"; cout << "第1個(gè)復(fù)數(shù):"; cin >> num1; // 輸入第 1個(gè)復(fù)數(shù) cout << "第2個(gè)復(fù)數(shù):"; cin >> num2; // 輸入第 2個(gè)復(fù)數(shù) sub = num1 - num2; cout << "第3個(gè)復(fù)數(shù):"; cin >> num1; // 輸入第 3個(gè)復(fù)數(shù) int i = 4; while

42、 ( !(num1==Zero) ) { sub = sub - num1; // 實(shí)現(xiàn)復(fù)數(shù)減法 cout << "第" << i << "個(gè)復(fù)數(shù):"; cin >> num1; // 輸入第 i個(gè)復(fù)數(shù) i++; } cout << "結(jié)果是:" << sub << endl; cout << "按任意鍵繼續(xù)\n"; cin.get(); cin.get(); } // 實(shí)現(xiàn)復(fù)數(shù)的乘法 void Mul() { user.nMul++; CComplex nu

43、m1, num2, mul, Zero(0, 0); cout << "乘法計(jì)算\n" << "最少輸入兩個(gè)復(fù)數(shù),輸入“0”結(jié)束\n"; cout << "第1個(gè)復(fù)數(shù):"; cin >> num1; // 輸入第 1個(gè)復(fù)數(shù) cout << "第2個(gè)復(fù)數(shù):"; cin >> num2; // 輸入第 2個(gè)復(fù)數(shù) mul = num1 + num2; cout << "第3個(gè)復(fù)數(shù):"; cin >> num1; // 輸入第 3個(gè)復(fù)數(shù) int i =

44、4; while ( !(num1==Zero) ) { mul *= num1; // 實(shí)現(xiàn)復(fù)數(shù)的減法 cout << "第" << i << "個(gè)復(fù)數(shù):"; i++; cin >> num1; // 輸入第 i個(gè)復(fù)數(shù) } cout << "結(jié)果是:" << mul << endl; cout << "按任意鍵繼續(xù)\n"; cin.get(); cin.get(); } // 實(shí)現(xiàn)復(fù)數(shù)的自加,實(shí)部與虛部均自加 1 void Add1() {

45、user.nAdd++; // 用戶加法記錄次數(shù)加 1 CComplex num1; cin >> num1; // 這里 輸入的數(shù)可能是虛部為0的數(shù),原書代碼未作判斷 num1++; // 實(shí)部與虛部分別加 1 cout << "自加結(jié)果為" << num1 << endl; cout << "按任意鍵繼續(xù)\n"; cout.flush(); cin.get(); cin.get(); } // 實(shí)現(xiàn)復(fù)數(shù)的自減 void Sub1() { user.nSub++;

46、 // 用戶減法記錄次數(shù)加 1 CComplex num1; cin >> num1; num1--; cout << "自減結(jié)果為" << num1 << endl; cout << "按任意鍵繼續(xù)\n"; cout.flush(); cin.get(); cin.get(); } // 比較兩個(gè)復(fù)數(shù)的大小 void Compare() { CComplex num1, num2; cout << "輸入兩個(gè)復(fù)數(shù)\n"; cout << "第1個(gè)復(fù)數(shù):"; cin >> num1; c

47、out << "第2個(gè)復(fù)數(shù):"; cin >> num2; if ( num1==num2 ) cout << " 這兩個(gè)復(fù)數(shù)相等\n"; else if ( num1>num2 ) cout << num1 << "的模大于" << num2 << "的模\n"; else if ( num1

48、.get(); } // 輸出本次用戶使用計(jì)算器的情況記錄 void userprint() { cout << user.szName << "使用的次數(shù)為:" << user.nTime << "次" << endl; cout << "其中:\t 加法次數(shù):" << user.nAdd << "次\n" << "\t 減法次數(shù):" << user.nSub << "次\n" << "\t 乘法次數(shù):" << user.nMul << "次\n" << "\t 測(cè)試次數(shù):" << user.nTest << "次\n"

49、 << "\t 平均成績(jī):" << user.dlAve << "次" << endl; } // 用戶登陸,開(kāi)始啟動(dòng)計(jì)算器 void Login() { char szName[20]; cout << "請(qǐng)輸入您的姓名:"; cin.getline(szName, 20); ifstream infile; User user1; infile.open("user.dat", ios::binary|ios::in); // 打開(kāi)用戶資料文件 (這個(gè)地方 若沒(méi)有文件,則不會(huì)創(chuàng)建新文件,不知何問(wèn)題 if

50、 ( !infile ) // 若沒(méi)有用戶資料文件 { cout << "沒(méi)有原始記錄文件, 您是第 1位用戶!\n"; strcpy(user.szName, szName); // 為全局變量 user 中 szName 成員賦值 user.nTime++; return; // 函數(shù)返回 } // 讀取用戶資料文件(從該文件的第1個(gè)字節(jié)開(kāi)始逐個(gè)讀取信息) // 如果用戶資料中找到了當(dāng)前姓名的用戶,則說(shuō)明是老用戶,顯示一些信息,并作一些使用次數(shù)的記錄。 infile.re

51、ad( (char *)&user1, sizeof(User) ); while ( !infile.eof() ) // 只要沒(méi)到文件末尾(未遇文件結(jié)束符),則一直進(jìn)行此循環(huán) { if ( strcmp(user.szName, szName)==0 ) // 將用戶資料文件中的用戶名與讀取的用戶名進(jìn)行比較 { user = user1; // 若該用戶以前使用計(jì)算器,將原資料賦值給全局變量 user user.nTime++; // 用戶使用次數(shù)加 1 cout << "歡

52、迎您再次使用復(fù)數(shù)計(jì)算器!"; userprint(); // 輸出用戶資料中的信息 cin.get(); infile.close(); return; } infile.read( (char *)&user1, sizeof(User) ); } // 如果用戶資料中沒(méi)有當(dāng)前用戶,表明該用戶是第 1次使用計(jì)算器 cout << "歡迎您使用復(fù)數(shù)計(jì)算器!"; strcpy(user.szName, szName); // 為全局變量 user 中 szName 成員賦值 user

53、.nTime++; //用戶使用次數(shù)加 1 infile.close(); return; } // 當(dāng)前用戶使用完計(jì)算器后,保存或更新用戶資料 void SaveFile() { userprint(); // 輸出當(dāng)前用戶使用計(jì)算器的詳細(xì)信息 fstream file; User user1; file.open("user.dat", ios::binary|ios::in|ios::out); // 打開(kāi)用戶資料 if (!file) { cout <

54、< "文件打開(kāi)錯(cuò)誤,不能將記錄更新\n"; return; } file.seekg(0, ios::beg); // 文件指針指向文件頭 while( !file.eof() ) { file.read( (char *)&user1, sizeof(User) ); // 逐個(gè)讀取用戶資料文件中的用戶信息 // 將用戶資料文件中的用戶名依次與當(dāng)前用戶名進(jìn)行比較 if ( strcmp(user1.szName, user.szName)==0 ) // 若在用戶資料文件中找到該用戶 {

55、 file.seekp(-(sizeof(User)), ios::cur); // 文件指針退回到該用戶資料信息的首位置 file.write( (char *)&user, sizeof(User) ); // 將全局變量 user 的內(nèi)容寫到用戶資料文件中,即更新該用戶的資料 file.close(); return; // 程序返回 } } file.close(); fstream outfile; // 若在用戶資料文件中找不到當(dāng)前用戶的資料,表明當(dāng)前用戶是第 1次使用計(jì)算器

56、 outfile.open("user.dat", ios::binary|ios::app); // 以添加的方式打開(kāi)用戶資料文件 outfile.write( (char *)&user, sizeof(User) ); // 將當(dāng)前用戶的資料添加在用戶資料文件中 outfile.close(); return; } } using namespace NameCComplex; // 使用標(biāo)準(zhǔn)命名空間 NameCComplex /*-----------------------------------

57、------------------------------------ | | 主函數(shù)部分 | ----------------------------------------------------------------------*/ int main(void) { srand( time(NULL) ); // 初始化隨機(jī)數(shù)種子 Login(); // 打開(kāi)文件,登記用戶 int Choice; do { system("cls");

58、 // 系統(tǒng)執(zhí)行命令:cls 為清屏 cout << " 這是一個(gè)簡(jiǎn)單的復(fù)數(shù)計(jì)算器程序,可以實(shí)現(xiàn)以下功能,請(qǐng)按下對(duì)應(yīng)的鍵(1 ~ 7)進(jìn)入\n\n\n"; cout << "\t================================主菜單=================================\n"; cout << "\t 1:多復(fù)數(shù)加法\n"; cout << "\t 2:多復(fù)數(shù)減法\n"; cout << "\t 3:測(cè)試 100以內(nèi)的復(fù)數(shù)加減乘法運(yùn)算,1次測(cè)試10道題\n"; cout << "\t 4:多復(fù)數(shù)乘法

59、\n"; cout << "\t 5:復(fù)數(shù)自加\n"; cout << "\t 6:復(fù)數(shù)自減\n"; cout << "\t 7:復(fù)數(shù)比較\n"; cout << "\t 0:退出計(jì)算器程序\n\n"; cout << "\t 請(qǐng)輸入您的選擇:"; cin >> Choice; // 下面用 switch - case 語(yǔ)句實(shí)現(xiàn)多現(xiàn)選擇,當(dāng)然也可以用 if - else 語(yǔ)句實(shí)現(xiàn)多項(xiàng)選擇 switch(Choice) { case 1: Add(); break; case 2: Sub(); break

60、; case 3: Test(); break; case 4: Mul(); break; case 5: Add1(); break; case 6: Sub1(); break; case 7: Compare(); break; case 0: cout << "\n\t 歡迎下次繼續(xù)使用復(fù)數(shù)計(jì)算器!\n\n"; break; default: cout << "\n\t 輸入錯(cuò)誤,請(qǐng)按任意鍵后重新輸入!\n"; cin.get(); cin.get(); }

61、 }while(Choice); // 當(dāng) Choice 值為 0時(shí), 結(jié)束循環(huán) SaveFile(); // 退出程序前,保存或更新當(dāng)前用戶的使用情況 system("pause"); return 0; } /* 書上的主函數(shù)寫法: int main(void) { srand( time(NULL) ); // 初始化隨機(jī)數(shù)種子 Login(); // 打開(kāi)文件,登記用戶 char strChoice[20]; do {

62、system("cls"); // 系統(tǒng)執(zhí)行命令:cls 為清屏 cout << " 這是一個(gè)簡(jiǎn)單的復(fù)數(shù)計(jì)算器程序,可以實(shí)現(xiàn)以下功能,請(qǐng)按下對(duì)應(yīng)的鍵(1~7)進(jìn)入\n\n\n"; cout << "\t================================主菜單=================================\n"; cout << "\t 1:多復(fù)數(shù)加法\n"; cout << "\t 2:多復(fù)數(shù)減法\n"; cout << "\t 3:測(cè)試 100以內(nèi)的復(fù)數(shù)加減乘法運(yùn)算,1次測(cè)試10道題\n"; cout

63、<< "\t 4:多復(fù)數(shù)乘法\n"; cout << "\t 5:復(fù)數(shù)自加\n"; cout << "\t 6:復(fù)數(shù)自減\n"; cout << "\t 7:復(fù)數(shù)比較\n"; cout << "\t 0:退出計(jì)算器程序\n\n"; cout << "\t 請(qǐng)輸入您的選擇:"; cin >> strChoice; // 下面用 if - else 語(yǔ)句實(shí)現(xiàn)多現(xiàn)選擇,當(dāng)然也可以用 switch - case 語(yǔ)句實(shí)現(xiàn)多項(xiàng)選擇 if ( strcmp(strChoice, "1")==0 ) Add(); else if ( st

64、rcmp(strChoice, "2")==0 ) Sub(); else if ( strcmp(strChoice, "3")==0 ) Test(); else if ( strcmp(strChoice, "4")==0 ) Mul(); else if ( strcmp(strChoice, "5")==0 ) Add1(); else if ( strcmp(strChoice, "6")==0 ) Sub1(); else if ( strcmp(strChoice, "7")==0 ) Compare

65、(); else if ( strcmp(strChoice, "0")==0 ) { cout << "\n\t 歡迎下次繼續(xù)使用復(fù)數(shù)計(jì)算器!\n\n"; break; } else { cout << "\n\t 輸入錯(cuò)誤,請(qǐng)按任意鍵后重新輸入!\n"; cin.get(); cin.get(); } }while( (strcmp(strChoice, "0")) ); SaveFile(); // 退出程序前,保存或更新當(dāng)前用戶的使用情況 system("pause");

66、 return 0; } */} 4 運(yùn)行結(jié)果與分析 5 總結(jié) 1. 明確實(shí)驗(yàn)操作對(duì)象和目的。 2. 針對(duì)目的和對(duì)象進(jìn)行總體設(shè)計(jì)。 3. 細(xì)化流程:書寫程序,編譯、運(yùn)行并調(diào)試。 4. 一開(kāi)始錯(cuò)誤的將復(fù)數(shù)的兩個(gè)部分一起聲明,在后來(lái)的編程過(guò)程中遇到了計(jì)算上的錯(cuò)誤,于是將復(fù)數(shù)的實(shí)部和虛部分開(kāi)聲明,問(wèn)題得到了解決 5. 計(jì)算器還可擴(kuò)充用戶輸入錯(cuò)誤算式時(shí)提示用戶的功能 6. 計(jì)算器還可以擴(kuò)充帶有括號(hào)的功能 (課程設(shè)計(jì)過(guò)程中出現(xiàn)的問(wèn)題及其解決方案,可擴(kuò)充的功能及設(shè)計(jì)等。) 6 參考文獻(xiàn) [1]李愛(ài)華,程磊著. 面向?qū)ο蟪绦蛟O(shè)計(jì)(C++語(yǔ)言) .北京:清華大學(xué)出版社,2010 [2]劉振安,劉燕君著. C++程序設(shè)計(jì)課程設(shè)計(jì). 北京: 機(jī)械工業(yè)出版社,2004 [3]譚浩強(qiáng)著. C++程序設(shè)計(jì)實(shí)踐指導(dǎo). 北京:清華大學(xué)出版社,2005

展開(kāi)閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!