復(fù)數(shù)計(jì)算器課程設(shè)計(jì)
《復(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),開機(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 主要算法流程圖 開始 聲明一個(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
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;
}
// 用戶登陸,開始啟動(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); // 打開用戶資料文件 (這個(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é)開始逐個(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); // 打開用戶資料
if (!file)
{
cout < 54、< "文件打開錯(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); // 以添加的方式打開用戶資料文件
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(); // 打開文件,登記用戶
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(); // 打開文件,登記用戶
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. 一開始錯(cuò)誤的將復(fù)數(shù)的兩個(gè)部分一起聲明,在后來(lái)的編程過(guò)程中遇到了計(jì)算上的錯(cuò)誤,于是將復(fù)數(shù)的實(shí)部和虛部分開聲明,問(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
- 溫馨提示:
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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競(jìng)賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫(kù)試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫(kù)試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫(kù)試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫(kù)及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫(kù)含解析
- 1 礦山應(yīng)急救援安全知識(shí)競(jìng)賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案