《中南大学c++课程设计报告.docx》由会员分享,可在线阅读,更多相关《中南大学c++课程设计报告.docx(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、中南大学高级程序设计实践C+课程设计报告设计题目 教学设备治理系统指导教师设 计 者专业班级设计日期目录 课题的根本内容和要求二 程序功能简介三 主体内容:1 设计分析2 程序整体构造3 局部模块的构造4 相关模块源程序5 操作方法 6 试验结果7 设计体会8 参考文献 根本内容和要求一根本要求本设计承受教师指导、学生自学和独立编程操作方式,先由学生查阅与本设计有关的书籍和资料,利用Visual C+ 6.0 设计环境与开发工具,在两周时间内,完成课程设计内容中的一个治理系统,具体要求如下:1、独立思考:独立完成课程设计中各任务的设计和调试。2、上机预备:每次上机前,要事先编制好预备调试的程序
2、,认真想好调试步骤和有关环境的设置方法,预备好有关的文件。3、数据治理:治理系统中的数据可用数据库如Access 数据库的形式保存,也可用一般文件文本文件或二进制文件 的形式保存。4、程序要求:界面美观、可操作性强、稳定性好。二根本内容: 教学设备治理系统为便利治理学校教学设备,编写一个教学设备治理系统软件。系统记录必需包括设备编号、设备名称、生产厂家、购置日期、台数、单价、及备注等。二程序功能简介(1) 添加:增加一台设备的记录到治理系统中。(2) 查询:可以依据设备编号查找某台设备的相关信息,假设找到则显示其信息。(3) 修改:在治理系统中修改一台设备的记录。(4) 保存:将全部教学设备信
3、息保存在一个文件中数据库文件或一般的文本文件。(5) 读取:从文件中读取已保存了数据。(6) 删除:从治理系统中删除一条记录。(7) 恢复:能恢复被删除的记录。(8) 统计:(A)统计每页合计台数及金额;(B)累计设备的总台数及总金额;(C)统计单价在:200 元以下、200800 元之间和 800 元以上的设备总台数及总金额。(D)以表格形式打印教学设备明细表。(9) 其他:可以依据自己的思路设计其他功能。三 主体内容1 设计分析依据问题描述和要求,系统要求能够添加设备,按设备编号查询, 修改,保存,读取,删除,恢复设备的信息。系统既然具有“数据存盘”功能,设备数据可以保存到磁盘文件,那么也
4、就意味着今后可以从磁盘文件读出人员数据,所以系统增加了“人员数据装入”模块, 以便利用户使用,避开数据重录入。考虑到系统实现简捷,人员数据文件承受文本文件,人员数据文件名.使用面对对象的程序设计思想进展分析,整个系统涉及两个类的信息和操作,设备和购置日期。所以系统主要涉及两个大类:设备类Equipment,日期Date。系统的主体框架就是设备类,考虑系统操作的设备信息的数量具有不确定性,所以考虑使用链表保存,处理设备信息。设备类包含所以设备信息的一个不带头结点的链表,可以对设备信息进展增,删,改,查询,根底数据设置,数据存盘,数据装入等操作的相关模块Add,Delete,Modify,Find
5、,Save,Recover,Read,Statistic作为成员函数。2 程序整体构造1系统功能模块图设备管理系统添加查找修改保存读取删除恢复统计设备设备设备设备设备设备设备设备信息信息信息信息信息信息信息信息3局部模块的构造开 始创立设备 对象显示菜单承受输入依据输入执行操作NO退出YES完毕1 主函数流程2类的层次图EquipmentNumNameDateFactoryAmountPrriceYearMonthDay(3)Equipment:Add开头输入操作输入设备信息 创立结点设备结点参加链表完毕4Equipment:Delete开头输入设备编号查找删除结点结点存在?链表删除设备结点提
6、示未找到完毕(5)Equipment:Modify开头输入设备编号查找结点结点存在修改结点提示未找到完毕6Equipment: Save开头翻开设备数据文件遍历链表保存设备数据关闭文件翻开根底数据文件保存根底数据关闭文件完毕四 相关模块源程序#include #include #include #include using namespace std; class Dateprivate:int year; int month; int day;public:Date(int y = 0 , int m = 0 , int d = 0); Date & operator = (Date &a)
7、;void foutput(ofstream &fout); void output;void alloutput;void Date:alloutputcoutyear“:“month“:“day”t”;void Date:foutput(ofstream &fout)foutyear“ “month“ “dayendl;Date:Date(int y,int m,int d)year = y; month = m; day = d;Date & Date:operator = (Date &a)year = a.year; month = a.month; day = a.day; ret
8、urn *this;void Date:outputcoutyear“年“month“月“day“日“endl;class Equipmentprivate:int num; /设备编号char name20; /设备名称char factory30; /生产厂家Date date; /购置日期int amount; /台数double prrice; /单价char notes101; /备注public:Equipment(int num_ = 0 , char *name_ = NULL , int amount_ = 0, double prrice_ = 0);Equipment &
9、 operator = (Equipment &a)num = a.num; strcpy(name,a.name); strcpy(factory,a.factory); date = a.date;return *this;void give(char *factory_ , Date date_ , char *notes); void output;void alloutput; int getNum; int getAmount;double getPrrice; void setNum; void setName; void setFactory; void setDate; vo
10、id setAmount; void setPrrice; void setNotes;void foutput(ofstream &fout);void Equipment:alloutputcoutnum”t”name”t”factory”t”; date.alloutput;cout”t”amount”t”prrice”t”notesendl;void Equipment:give(char *factory_ , Date date_ , char *notes_)strcpy(factory,factory_); date = date_; strcpy(notes,notes_);
11、Equipment:Equipment(int num_, char *name_,int amount_, double prrice_)num = num_; strcpy(name,name_); amount = amount_; prrice = prrice_; strcpy(factory,“未设置“); strcpy(notes,“无“);void Equipment:outputcout“1.设备编号:“numendl; cout“2.设备名称:“nameendl; cout“3.生产厂家:“factoryendl; cout“4.购置日期:“; date.output; c
12、out“5.台数:“amountendl; cout“6.单价:“prriceendl; cout“7.备注:“notesendl;int Equipment:getNumreturn num;int Equipment:getAmountreturn amount;double Equipment:getPrricereturn prrice;void Equipment:setNumcoutnum;void Equipment:setNamecoutname;void Equipment:setFactorycoutfactory;void Equipment:setDateint y,m
13、,d;coutymd;Date a(y,m,d); date = a;void Equipment:setAmountcoutamount;void Equipment:setPrricecoutprrice;void Equipment:setNotescoutnotes;void Equipment:foutput(ofstream &fout)foutnumendl; foutnameendl; foutfactoryendl; date.foutput(fout); foutamountendl; foutprriceendl; foutnotesendl;class Listpriv
14、ate:int n,capacity;Equipment *elem;public:List;List;bool add;添/加/bool find查; 询/void modify;修/改/ bool Save; 设/备保存bool Read;读/取/void Delete删; 除/设备记录void Recover;恢/复/ 被删除的记录void Statistic(统);计/;List:Listn = 0;capacity = 1000;elem = new Equipment *capacity;for(int i = 0 ; i capacity ; i+) elemi = NULL;L
15、ist:Listfor (int i = 0 ; i n ; i+)delete elemi; elemi = NULL;if(elem) delete elem; elem = NULL;bool List:addif(n capacity)int num_;char name_20; int amount_; double prrice_;coutnum_;coutname_;coutamount_;coutprrice_;elemn = new Equipment(num_,name_,amount_,prrice_); n+;return true;return false;bool
16、List:findint num_;coutnum_;for(int i = 0 ; i getNum)cout“查找成功!设备信息如下:“output;return true;cout“查找失败!无此设备信息。“ 0)int i,num_; bool ok = false;cout“现有的设备编号如下:“endl;for (i = 0 ; i n ; i+)coutgetNum“ “;coutendl;coutnum_;for (i = 0 ; i getNum=num_)ok = true;int choice = 1; dosystem(“cls“);elemi-output;cout“
17、8.退出修改。“endl; coutchoice;if(choice 8)cout“输入错误,请重输入!“setNum; break;case 2:elemi-setName; break;case 3:elemi-setFactory; break;case 4:elemi-setDate; break;case 5:elemi-setAmount; break;case 6:elemi-setPrrice; break;case 7:elemi-setNotes; break;case 8:break; while (choice != 8);if(!ok) cout“您的输入有误!“en
18、dl;else cout“现无任何设备!“endl;bool List:Saveofstream fout; fout.open(“save.txt“); fout.put(0); /清楚 txt 文档的数据fout.seekp(-1,ios:end); /在 txt 文档中光标退格if(fout.fail)elsecout“找不到文件,保存失败!“endl; return false;for(int i = 0 ; i foutput(fout);cout“保存成功!“endl; fout.close;return true;bool List:Readint size; ifstream
19、fin;fin.open(“save.txt“); streampos pos = fin.tellg; fin.seekg(0,ios:end);size = fin.tellg; fin.seekg(pos);if(fin.fail)elsecout“找不到文件,读取失败!“num_; finname_; finfactory_; finymd; if(fin.eof) break; Date date_(y,m,d); finamount_; finprrice_; finnotes_;elemn = new Equipment(num_,name_,amount_,prrice_);
20、elemn-give(factory_,date_,notes_);n+;cout“读取成功!“ 0)int i,num_; bool ok = false;cout“现有的设备编号如下:“endl;for (i = 0 ; i n ; i+)coutgetNum“ “;coutendl;coutnum_;for (i = 0 ; i getNum=num_)ok = true; system(“cls“);elemi-output;cout“您确定要删除此设备? Y or N“str;if(str != ”Y” & str != ”N”)coutfoutput(fout); fout.clo
21、se;if(i = n-1)elsen-;delete elemi; elemi = NULL;Equipment *tem; tem = elemi; elemi = elemn-1; elemn-1 = tem; delete elemn-1; elemn-1 = NULL;cout“删除成功!“endl;else cout“删除失败!“endl;if(!ok) cout“您的输入有误!“endl;else cout“现无任何设备!“endl;void List:Recoverint size; ifstream fin;fin.open(“recover.txt“); streampos
22、 pos = fin.tellg; fin.seekg(0,ios:end);size = fin.tellg; fin.seekg(pos); if(fin.fail)elsecout“找不到文件,恢复失败!“num_; finname_; finfactory_; finymd; if(fin.eof) break; Date date_(y,m,d); finamount_; finprrice_; finnotes_;elemn = new Equipment(num_,name_,amount_,prrice_); elemn-give(factory_,date_,notes_);
23、n+;cout“恢复成功!“endl; fin.close;ofstream fout; fout.open(“recover.txt“);fout.put(0);fout.seekp(-1,ios:end); fout.close;void List:Statisticsystem(“cls“);int i,j,n_200 = 0,n200_800 = 0,n800_ = 0; double p_200 = 0,p200_800 = 0,p800_ = 0; Equipment *tem;for(i = 0 ; i n ; i+)for(j = 0 ; j getPrrice elemj+1
24、-getPrrice)tem = elemj; elemj = elemj+1; elemj+1 = tem;cout“编号“”t”“名称“”t”“厂家“”t”“日期“tt“数量“”t”“单价“”t”“备注“endl; for (i = 0 ; i getPrrice getAmount;p_200 += elemi-getAmount*elemi-getPrrice;else if(elemi-getPrrice getAmount;p200_800 += elemi-getAmount*elemi-getPrrice;n800_ += elemi-getAmount;p800_ += el
25、emi-getAmount*elemi-getPrrice;elemi-alloutput;coutendl;cout“单价在:200 元以下的设备总台数及总金额为:“”t”n_200“tt“p_200endl;cout“单价在:200800 元的设备总台数及总金额为:“”t”n200_800“tt“p200_800endl; cout“单价在:800 元以上的设备总台数及总金额为:“”t”n800_“tt“p800_endl;cout“累计全部设备的总台数及总金额为:“tt“n_200+n200_800+n800_“tt“p_200+p200_800+p800_endl;int mainLi
26、st list; int n = 0;int choice = 1; system(“color 1C“); docout“tttt 教学设备治理系统“endl; cout“tt=“endl;cout“tt#tt 1.添加设备内容。tt#“endl; cout“tt#tt 2.查找设备内容。tt#“endl; cout“tt#tt 3.修改设备内容。tt#“endl; cout“tt#tt 4.保存设备记录。tt#“endl; cout“tt#tt 5.读取设备记录。tt#“endl; cout“tt#tt 6.删除设备内容。tt#“endl; cout“tt#tt 7.恢复删除记录。tt#“
27、endl; cout“tt#tt 8.统计设备内容。tt#“endl; cout“tt#tt 9.退出治理系统。tt#“endl;cout“tt=“endl;coutchoice;if(choice 9)cout“输入错误,请重输入!“endl; choice = 1;continue;switch (choice)case 1:if(list.add)elsecout“添加成功!“endl;cout“线性表已满,添加失败!“endl;break; case 2:list.find; break;case 3:list.modify; break;case 4:list.Save; break
28、;case 5:list.Read; break;case 6:list.Delete; break;case 7:list.Recover; break;case 8:list.Statistic; break;case 9:break;system(“pause“);system(“cls“); while (choice != 9); return 0;五 操作方法程序中标注局部是本人所负责,即修改和保存功能。修改功能我先用已经定义的设备编号数组指针找到要修改的设备编号,然后指向所要修改的设备信息进展修改,假设输入的编号文件中不存在,则重输入编号。保存功能我运用了课本中文件的翻开,输入,
29、关闭的学问,将输入的信息放在磁盘文件的适当位置,进展保存。在编译连接前先进展静态检查,对每个函数模块消灭的细节语法错误逐步改正。再进展系统编译连接,依据编译器提示错误类型逐个修正。调试一个函数模块的程序时,将其他模块及相应的函数定义用注释语句注释,自顶向下,挨次化,模块化。输入的数据无法查找时,调用嵌套查找函数,将其实参传递至相应形参,定位数据,并输出。六 试验结果(1) 主界面(2) 添加结果(3) 查询结果(4) 修改结果(5) 保存结果(6) 读取结果(7) 删除结果(8) 恢复结果(9) 统计结果七 设计心得本次课程设计虽然只有三个礼拜的时间,但内容充实而且所用的学问很多,但我们寻常在
30、课堂上所学的学问很有限,这就需要我们大量的自学书本和课外的其他书籍上的学问。为了让程序使人看懂,我用到的学问点不是格外多,大都是一些根本学问,我能娴熟的运用这些学问编程也算是一个很大的成功了。到底很多学问没有学,能用根本学问就尽量用根本学问。C+设计实践是对之前学过的学问的加深和稳固,之前学的较浅,实践的时间较少,这次实践让我对 C+程序有了更加深刻的理解,心里也由不宠爱到宠爱,感觉很有意思也很有用,可以设计一些有用的或是自己宠爱的的程序。最令我收益的是写程序的过程和调试修改的过程,之前没有把学问学习全面,因此编写起来是有难度的,在预先想好程序构造后,就开头一个函数一个函数来编写,不懂得地方就
31、问同学或教师,当程序运行成功时,内心格外感动。我感觉这很符合大学的教育理念,是对个人力量的一个熬炼。通过这三周的实践学习,我收获的不仅仅是一个程序,我的自学力量, 以及查找问题,解决问题的力量也得到了提升。从课程设计的目的动身,通过课程设计的各个环节,通过 C+ 课程设计实例,我们把握了 C+语言程序设计根底,学会运用根本算法,程序掌握构造,学会了调试程序的方法,培育严谨的思维。并逐步加深了对学问的理解和实际应用,学会分析和解决问题,将所学学问联系实际,提高了我对语言学习的乐观性,增加了自己的动手力量。在遇到实际操作问题时,尝试用各种思路,查询相关学问,与他人沟通,利用资源,从问题中思考收获。八 参考文献(1) C+程序设计(2) C+程序设计解题与上机指导