版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第24章 信息管理不用愁——信息管理系統(tǒng)實(shí)戰(zhàn),日歷系統(tǒng) 學(xué)生成績(jī)管理系統(tǒng) 銀行卡管理系統(tǒng),第24章 信息管理不用愁——信息管理系統(tǒng)實(shí)戰(zhàn),日歷系統(tǒng) 學(xué)生成績(jī)管理系統(tǒng) 銀行卡管理系統(tǒng),第24章 信息管理不用愁——信息管理系統(tǒng)實(shí)戰(zhàn),日歷系統(tǒng) 學(xué)生成績(jī)管理系統(tǒng) 銀行卡管理系統(tǒng),第24章 信息管理不用愁——信息管理系統(tǒng)實(shí)戰(zhàn),日歷系統(tǒng) 學(xué)生成績(jī)管理系統(tǒng) 銀行卡管理系統(tǒng),24.1 日歷系統(tǒng),本
2、系統(tǒng)實(shí)現(xiàn)了控制臺(tái)下打印日歷。只要輸入指定年份,就能打印出該年的日歷,包括星期。通過(guò)本例的學(xué)習(xí),培養(yǎng)讀者在VC++6.0環(huán)境中,學(xué)會(huì)調(diào)試程序的能力,鞏固分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的知識(shí),讓讀者形成C++模塊化設(shè)計(jì)的思想。,24.1 日歷系統(tǒng),24.1.1 系統(tǒng)分析24.1.2 功能分析及實(shí)現(xiàn)24.1.3 開(kāi)發(fā)常見(jiàn)問(wèn)題及解決,24.1.1 系統(tǒng)分析,1. 需求分析隨意給出某年(如2003年),可以顯示該年的日歷(包括每月的天數(shù)和對(duì)應(yīng)
3、的星期幾),并且在每月的左上角或右上角打印出相應(yīng)的年份和月份,要求輸出界面盡可能整齊,美觀。,24.1.1 系統(tǒng)分析,2. 系統(tǒng)分析根據(jù)問(wèn)題描述,整個(gè)系統(tǒng)包含2個(gè)模塊,為了體現(xiàn)模塊化編程的思想,對(duì)每一個(gè)模塊都分別編寫函數(shù)來(lái)實(shí)現(xiàn)。系統(tǒng)流程圖如下。輸入年份顯示日歷開(kāi)始結(jié)束,,24.1.2 功能分析及實(shí)現(xiàn),1. 定義日歷類 01 class calendar02 {03 int weekday;04 int
4、year;05 public:06 void printmonthdays();//打印每月的日歷07 void printtitle(int m);//打印日歷頭08 int monthdays(int m) ;//計(jì)算每月的天數(shù)09 int firstday(int y); //計(jì)算每年的第一天是周幾10 };,24.1.2 功能分析及實(shí)現(xiàn),2. 計(jì)算每月的天數(shù)在一年中有的月份
5、是30天,有的是31天,2月份的天數(shù)根據(jù)是否是閏年不同,又有28天和29天的區(qū)別。,24.1.2 功能分析及實(shí)現(xiàn),01 int calendar::monthdays(int m)//判斷每月的天數(shù)02 {03 switch (m)04 {05 case 1:06 case 3:07 case 5:08 case 7:09 case 8:10
6、case 10:11 case 12:12 return 31;//1,3,5,7,8,10,12每月有31天13 case 4:14 case 6:15 case 9:16 case 11:17 return 30; //4,6,9,11每月有30天18 case 2:19 if (((year%4==0 &&
7、year%100!=0)||year%400==0)) //判斷是否閏年。20 return 29;21 else 22 return 28;23 default: return 0;24 }25 },24.1.2 功能分析及實(shí)現(xiàn),3. 打印日歷01 void calendar::printmonthdays()02 {03
8、int days;04 for(int n=1;n<=12;n++)//12個(gè)月份05 {06 printtitle(n);//打印日歷頭07 days=monthdays(n);08 for(int i=1;i<=days;i++)09 {10 printf("%5d",i);11 weekda
9、y=(weekday+1)%7;12 if (weekday==0) printf("\n ");13 }14 printf("\n");15 }16 },24.1.2 功能分析及實(shí)現(xiàn),4. 打印每月的日歷頭01 void calendar::printtitle(int m) //02 {03 int i;
10、04 printf("\n%d月 日 一 二 三 四 五 六\n",m);05 printf(" ");06 for(i=0;i<weekday;i++)07 printf(" ");08 },24.1.2 功能分析及實(shí)現(xiàn),5. 判斷每年的第一天是星期幾int firstday(
11、int year) //判斷元旦是星期幾{double s ;s=floor(year-1+(year-1)/4.0-(year-1)/100.0+(year-1)/400.0+1);return (int)s%7;},24.1.2 功能分析及實(shí)現(xiàn),6. 提示打印模塊01 void main(int argc, char* argv[])02 {03 04 int year;0
12、5 int weekday;06 calendar cal;07 printf("請(qǐng)輸入你要查看的年份:");08 scanf("%d",& year);09 weekday=cal.firstday(year);10 printf("\n\n");11 printf("
13、 %d年\n",year); 12 cal.printmonthdays( );//打印日歷13 printf("\n\n");14 },24.1.3 開(kāi)發(fā)常見(jiàn)問(wèn)題及解決,⑴ 從公元01年的第一天開(kāi)始考慮(01年1月1日對(duì)應(yīng)星期一),以計(jì)算從01年至該年開(kāi)始的總天數(shù); ⑵ 注意每月的天數(shù)不同,并且二月分有2種情況:是否是閏年 ⑶ 為了將每月的日期和星期對(duì)應(yīng),用從顯
14、示月份開(kāi)始的總天數(shù)除7取余,控制日期和星期幾的對(duì)應(yīng)關(guān)系; ⑷ 可以構(gòu)造一個(gè)邏輯表達(dá)式來(lái)判斷該年是否是閏年:if (((year%4==0 && year%100!=0)||year%400==0));為判斷每月的天數(shù),可以用switch-case分支結(jié)構(gòu)。,24.2 學(xué)生成績(jī)管理系統(tǒng),本例是一個(gè)簡(jiǎn)單的學(xué)生成績(jī)管理系統(tǒng),所實(shí)現(xiàn)的功能有如下幾個(gè):⑴ 設(shè)計(jì)一個(gè)功能顯示菜單,并有選擇提示;⑵ 建立學(xué)生信息數(shù)據(jù),包括學(xué)號(hào)、
15、姓名、三門課(語(yǔ)文、數(shù)學(xué)和英語(yǔ))的成績(jī);⑶ 能實(shí)現(xiàn)學(xué)生信息增加、刪除和修改;⑷ 統(tǒng)計(jì)每個(gè)學(xué)生的總分和平均分;⑸ 按照總分從小到大排出名次;⑹ 任意輸入一個(gè)學(xué)好,能夠查出該學(xué)生在班級(jí)中的排名及其考試成績(jī)。通過(guò)本例,讀者可以更進(jìn)一步的學(xué)習(xí)類和結(jié)構(gòu)體的使用,以及C++中STL編程快捷與高效。,24.2 學(xué)生成績(jī)管理系統(tǒng),24.2.1 系統(tǒng)分析24.2.2 功能分析及實(shí)現(xiàn)24.2.3 開(kāi)發(fā)常見(jiàn)問(wèn)題及解決,24.2.1 系
16、統(tǒng)分析,1. 需求分析學(xué)生成績(jī)管理系統(tǒng)主要提供學(xué)生資料的輸入,學(xué)生資料的輸出,學(xué)生資料的查詢,學(xué)生資料刪除,以及學(xué)生成績(jī)的排序等。通過(guò)這次對(duì)學(xué)生成績(jī)管理系統(tǒng)的編寫,使讀者對(duì)現(xiàn)在所學(xué)的東西和以前所學(xué)的東西有了同一的了解,綜合的運(yùn)用。通過(guò)本例的學(xué)習(xí),讀者對(duì)結(jié)構(gòu)體以及類的使用有了更進(jìn)一步的認(rèn)識(shí)。,24.2.1 系統(tǒng)分析,2. 系統(tǒng)分析整個(gè)系統(tǒng)包含六個(gè)模塊,為了體現(xiàn)模塊化編程的思想,對(duì)每一個(gè)模塊都分別編寫函數(shù)來(lái)實(shí)現(xiàn)。學(xué)生信息的包括學(xué)號(hào)、姓
17、名以及三門功課的成績(jī),在本例中用一個(gè)結(jié)構(gòu)體來(lái)表示學(xué)生信息。在實(shí)際工作中,輸入的學(xué)生信息需要更新,本例子需要有一個(gè)對(duì)學(xué)生信息進(jìn)行編輯的模塊。為了更好的體現(xiàn)C++ 編程的優(yōu)越性,在排序的時(shí)候,用到了STL 編程中的sort方法。,24.2.2 功能分析及實(shí)現(xiàn),,24.2.2 功能分析及實(shí)現(xiàn),1. 定義類01 class student02 {03 public:04 char code[5]; //學(xué)號(hào)05
18、 char name[20]; //姓名06 double math,chinese,english,average,sum;//三門功課成績(jī)平均分 總分07 public:08 student();09 student(char cd[],char n[],double ma,double chin,double eng);10 double getsum();//計(jì)算總分11
19、 double getaver();// 計(jì)算機(jī)平均分12 };,24.2.2 功能分析及實(shí)現(xiàn),2. 主菜單的設(shè)計(jì)與實(shí)現(xiàn)主菜單顯示,主菜單的選項(xiàng)的輸入選擇,不同功能模塊的調(diào)用,從而達(dá)到用戶與該系統(tǒng)的交互。,,01 void control::jiemian()02 {03 cout<<endl;04 cout<<endl;05 cout<<
20、"*******************************************"<<endl;06 cout<<"* 請(qǐng)選擇您需要的操作! *"<<endl;07 cout<<"* (1)增加人員 *"<
21、;<endl;08 cout<<"* (2)刪除人員 *"<<endl;09 cout<<"* (3)修改數(shù)據(jù) *"<<endl;10 cout<<"* (4)查詢
22、 *"<<endl;11 cout<<"* (5)輸出所有學(xué)生的數(shù)據(jù) *"<<endl;12 cout<<"* (6)按成績(jī)排序 *"<<endl;13 cout<<
23、"* (0)退出 *"<<endl;14 cout<<"* 選擇相對(duì)的括號(hào)里的阿拉伯?dāng)?shù)字! *"<<endl;15 cout<<"*******************************************";16 c
24、out<<endl;17 cout<<endl;18 return;19 20 },24.2.2 功能分析及實(shí)現(xiàn),3. 增加人員功能的實(shí)現(xiàn)。選擇功能主菜單1,可以增加新的學(xué)生信息,包括學(xué)號(hào)、姓名以及三門功課的成績(jī)。,,void control::insert(std::vector &ver){student stu;char code[5];c
25、har name[20];double math,chinese,english;cout>code;cout>name;cout>math;cout>chinese;cout>english;strcpy(stu.code,code);strcpy(stu.name,name);stu.math=math;stu.chinese=chinese;
26、stu.english=english;stu.sum=math+chinese+english;stu.average=stu.sum/3;ver.push_back(stu);return;},24.2.2 功能分析及實(shí)現(xiàn),4. 刪除人員功能的實(shí)現(xiàn)輸入待刪除學(xué)生的學(xué)號(hào)和姓名,系統(tǒng)就可以刪除該學(xué)生的所有信息。,,01 void control::del(std::vector &ve
27、r)02 {03 char code[5];04 char name[20];05 cout>code;07 cout>name;09 vector::iterator i;10 for(i=ver.begin(); i!=ver.end(); ++i)11 {12 if(!strcmp((*i).code, code)
28、&&!(strcmp((*i).name,name)))13 {14 ver.erase(i);15 return;16 17 }18 }19 return;20 21 },24.2.2 功能分析及實(shí)現(xiàn),5. 編輯人員功能的實(shí)現(xiàn),,01 void control::edit(std
29、::vector &ver)02 {03 04 char code[5];05 char name[20];06 cout>code;08 cout>name;10 vector::iterator i,cur;11 for(i=ver.begin(); i!=ver.end(); ++i)12 {13
30、if(!strcmp((*i).code, code)&&!(strcmp((*i).name,name)))14 cur=i;15 }16 cout>(*cur).name;21 cout>(*cur).math;23 cout>(*cur).chinese;25 cout>(*cur).english;27
31、(*cur).sum=(*cur).math+(*cur).chinese+(*cur).english;28 (*cur).average=(*cur).sum/3;29 return;30 },24.2.2 功能分析及實(shí)現(xiàn),6. 排序功能的實(shí)現(xiàn),,01 void control::st(std::vector&ver)02 {03 char fg;04 cou
32、t>fg;13 14 if(fg=='0') //返回上一層菜單15 return;16 if(fg=='1')//按總分查詢排名17 {18 std::sort(ver.begin(), ver.end(), greatesum);19 list(ver);20 }21 22 23
33、 if( fg=='2' ) //按語(yǔ)文查詢排名24 {25 std::sort(ver.begin(), ver.end(), greatechinese);26 list(ver);27 }28 29 if( fg=='3' ) //按數(shù)學(xué)查詢排名30 {31 std::sort(ver.begin
34、(), ver.end(), greatemath);32 list(ver);33 }34 35 if(fg=='4' ) //按英語(yǔ)查詢排名36 {37 std::sort(ver.begin(), ver.end(), greateenglish);38 list(ver);39 }40 41 if(fg
35、=='5') //按平均分查詢排名42 {43 std::sort(ver.begin(), ver.end(), greateaverage);44 list(ver);45 }46 47 return;48 },24.2.2 功能分析及實(shí)現(xiàn),7. 其他功能⑴ 查詢功能:在主菜單界面選擇4,進(jìn)入查詢功能模塊,輸入要查詢的學(xué)號(hào)和姓名,即可輸出
36、相應(yīng)的信息,24.2.2 功能分析及實(shí)現(xiàn),⑵ 輸出所有信息功能:,24.2.3 開(kāi)發(fā)常見(jiàn)問(wèn)題及解決,⑴ 為了在程序中使用向量,需要包含頭文件#include ⑵ 例子中的排序算法,使用了STL編程中的sort()方法,避免了我們重復(fù)編寫排序代碼,需要包含頭文件 #include ,24.3 銀行卡管理系統(tǒng),本例子實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的銀行卡管理系統(tǒng)。功能主要包括創(chuàng)建新卡,卡號(hào)登錄。每個(gè)卡片信息包括有卡號(hào)以及用戶名信息。輸入卡號(hào)后可以對(duì)
37、銀行卡進(jìn)行管理,包括存款、取款以及每次操作的日志。通過(guò)本例的學(xué)習(xí),讀者能夠進(jìn)一步的學(xué)習(xí)結(jié)構(gòu)體和類的使用,并且能夠?qū)W習(xí)到二進(jìn)制文件的讀寫方法。,24.3 銀行卡管理系統(tǒng),24.3.1 系統(tǒng)分析24.3.2 功能分析及實(shí)現(xiàn)24.3.3 開(kāi)發(fā)常見(jiàn)問(wèn)題及解決,24.3.1 系統(tǒng)分析,1. 需求分析銀行卡管理系統(tǒng)應(yīng)該能實(shí)現(xiàn),新卡的錄入,以及卡號(hào)的登錄功能??ㄌ?hào)登錄后,應(yīng)該可以進(jìn)行存款、取款以及用戶每次操作日志的瀏覽。,24.3.1
38、 系統(tǒng)分析,2. 系統(tǒng)分析卡的信息包含有卡號(hào)以及用戶名稱,用一個(gè)結(jié)構(gòu)體struct Card來(lái)表示銀行卡信息。處于保密性的考慮,銀行卡的信息以二進(jìn)制的文件進(jìn)行存放。本系統(tǒng)分為以下幾大模塊:主菜單模塊、創(chuàng)建新卡模塊、卡號(hào)登錄模塊、存款模塊、取款模塊、日志瀏覽模塊。,,,24.3.2 功能分析及實(shí)現(xiàn),,24.3.2 功能分析及實(shí)現(xiàn),1. 定義類01 struct Card02 {03 int cardno;
39、//卡號(hào)04 char username[LENGTH];//用戶名05 double sum;//存款金額06 };07 08 struct Log09 {10 int cardno;//卡號(hào)11 char date[64];//日期12 char type[6];13 double money;//存錢輸入金額14
40、 double sum;//總金額15 };,24.3.2 功能分析及實(shí)現(xiàn),2. 主菜單的設(shè)計(jì)及實(shí)現(xiàn),,01 void mainjiemian()02 {03 cout<<"**********************************"<<endl;04 cout<<"* 銀行卡管理軟件 *
41、"<<endl;05 cout<<"* *"<<endl;06 cout<<"* (1) 創(chuàng)建新卡 *"<<endl;07 cout<<"*
42、 *"<<endl;08 cout<<"* (2) 卡號(hào)登錄 *"<<endl;09 cout<<"* *"<<endl;10 cout<<"* (0)
43、退出 *"<<endl;11 cout<<"**********************************"<<endl;12 },24.3.2 功能分析及實(shí)現(xiàn),3. 創(chuàng)建新卡模塊的實(shí)現(xiàn),,01 char filename[LENGTH]; //定義一個(gè)字符數(shù)組,來(lái)表示文件名02 Card t_cd;
44、//定義一個(gè)結(jié)構(gòu)體對(duì)象03 int i_cd;//定義卡號(hào)04 char s_name[LENGTH];//定義 用戶名05 cout>i_cd;//輸入卡號(hào)07 cout>s_name;//輸入用戶名09 t_cd.cardno=i_cd;10 strcpy(t_cd.username, s_name);11 t_cd.sum=0;12 it
45、oa(t_cd.cardno, filename, 10);//把卡號(hào)轉(zhuǎn)換成字符串13 fstream writefile(strcat(filename,".txt"),ios::out);14 writefile.write((char *)&t_cd, sizeof(t_cd));//寫入文件15 writefile.close();,24.3.2 功能分析及實(shí)現(xiàn),4.
46、 卡號(hào)登錄功能的實(shí)現(xiàn),,01 void logcard()02 {03 cout<<"****************"<<endl;04 cout<<"* (1) 存 款 *"<<endl;05 cout<<"* (2) 取 款 *"<<endl;06
47、cout<<"* (3) 讀取日志 *"<<endl;07 cout<<"* (0) 返 回 *"<<endl;08 cout<<"****************"<<endl;09 },24.3.2 功能分析及實(shí)現(xiàn),5. 存取款提示功能的實(shí)現(xiàn),,01 void log
48、operate(int cd)02 {03 char in;04 double money;05 Cardoperate cdop(cd);06 do{07 logcard();08 cin>>in;09 switch (in)10 {11 case '1':12 cout>money;14
49、cdop.Cardin(money);15 break;16 case '2':17 cout>money;19 cdop.Cardout(money);20 break;21 case '3':22 cdop.listlog();23 break;24 case '0':
50、25 break;26 default:cout<<"輸入錯(cuò)誤,請(qǐng)從新輸入。"<<endl;27 }28 }while(in!='0');29 return;30 },24.3.2 功能分析及實(shí)現(xiàn),6. 存款功能的實(shí)現(xiàn),,01 void Cardin(double m)02 {03 t = tim
51、e(0);04 card.sum+=m;05 lg.cardno= card.cardno;06 strftime( datatime, sizeof(datatime), "%Y年/%m月/%d日%H時(shí)%M分%S秒",localtime(&t)); 07 strcpy(lg.date, datatime);08 strcpy(lg.type,"存錢&
52、quot;);09 lg.money=m;10 lg.sum=card.sum;11 cout<<setiosflags(ios::fixed); 12 cout<<endl<<"卡號(hào):"<<card.cardno<<" 當(dāng)前總金額:"<<setprecision(2)<<c
53、ard.sum<<endl;13 Logoperate l_file(card.cardno);14 l_file.writelog(lg);15 },24.3.2 功能分析及實(shí)現(xiàn),7. 取款功能的實(shí)現(xiàn),,01 void Cardout(double m)02 {03 if(card.sum>=m)04 {05 t = time(0);06
54、 card.sum-=m;07 lg.cardno= card.cardno;08 strftime( datatime, sizeof(datatime), "%Y年/%m月/%d日%H時(shí)%M分%S秒",localtime(&t)); 09 strcpy(lg.date, datatime);10 strcpy(lg.type,"取錢&qu
55、ot;);11 lg.money=m;12 lg.sum=card.sum;13 cout<<setiosflags(ios::fixed); 14 cout<<endl<<"卡號(hào):"<<card.cardno<<" 當(dāng)前總金額:"<<setprecision(2)<&l
56、t;card.sum<<endl;15 Logoperate l_file(card.cardno);16 l_file.writelog(lg);17 }18 else19 {20 cout<<"警告:"<<"交易失?。∧膽裘嬗囝~已不足!請(qǐng)續(xù)存!"<<endl;21 }22
57、 },24.3.2 功能分析及實(shí)現(xiàn),8. 查詢存取記錄功能的實(shí)現(xiàn),24.3.3 開(kāi)發(fā)常見(jiàn)問(wèn)題及解決,⑴ 為了記錄每張卡的信息,例子中用一個(gè)結(jié)構(gòu)體來(lái)記錄卡的信息.⑵ 為了記錄用戶的操作時(shí)間,例子中使用了strftime()函數(shù)將時(shí)間格式化strftime( datatime, sizeof(datatime), "%Y年/%m月/%d日%H時(shí)%M分%S秒",localtime(&t));⑶ 由于銀
溫馨提示
- 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. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 第22章 信息管理
- 第22章 信息管理.doc
- 第22章 信息管理.doc
- 信息管理系統(tǒng)
- 信息管理系統(tǒng)第版本答案
- 信息管理系統(tǒng)
- 醫(yī)院信息管理系統(tǒng)——天和醫(yī)院信息管理系統(tǒng)2.0版
- 信息管理畢業(yè)設(shè)計(jì)--設(shè)備信息管理系統(tǒng)設(shè)計(jì)
- 《車輛信息管理》課程設(shè)計(jì)--車輛信息管理系統(tǒng)
- 校園信息管理系統(tǒng)
- 科研信息管理系統(tǒng)
- 學(xué)生信息管理系統(tǒng)
- 網(wǎng)吧信息管理系統(tǒng)
- 網(wǎng)上信息管理系統(tǒng)
- 旅游信息管理系統(tǒng)
- 《醫(yī)院信息管理系統(tǒng)》
- 學(xué)生信息管理系統(tǒng)
- 客戶信息管理系統(tǒng)
- 信息管理與信息系統(tǒng)
- 監(jiān)理信息管理系統(tǒng)
評(píng)論
0/150
提交評(píng)論