1、学校代码: 学 号: Hefei University课程项目设计报告 BACHELOR DISSERTATION 报告题目: 档案管理系统的设计与实现 年级专业(班级): 14电子信息工程2班 导师姓名: 李祎 完成时间: 2015/6/18 档案管理系统界面如下,当选择一个功能号时可以执行相应的功能。其中数据录入模块功能是录入人员工号、单位、姓名和部门编号;数据显示模块功能是显示当前所有的人员工号、单位、姓名和部门编号;数据排序功能是将当前所有的人员按工号、姓名、单位和部门编号排序,再进行信息保存和调入。欢迎进入档案管理系统 1.基本信息录入 2.基本信息显示 3.基本信息查询 4.基本信
2、息排序 5.基本信息保存 6.基本信息调入 7.退出系统 请选择功能号(1,2,3,4,5,6,7)功能介绍:信息录入功能:输入人员的基本信息,例如工号、姓名、年龄等;信息显示功能:显示所输入的人员档案的信息;信息查询功能:通过输入人员的工号来快速查询所需要知道的人员的档案信息。信息排序功能:将所输入的人员信息按照工号从小到大的顺序进行排序;信息保存功能:将所输入的人员信息数据以TXT文本的形式保存;信息调入功能:将保存的数据重新调入系统中;*主界面欢迎使用档案管理系统 1数据输入 2数据显示 3数据排序 4数据保存 5数据调入 6数据查询 7退出系统 请选择功能(1,2,3,4,5,6,7,
3、8):*输入界面请输入数据(工号/姓名/单位/部门编号)*显示界面序号 工号 姓名 单位 部门编号1 1101 chenchen hfuu 1241. InfoManagerMain.cpp主模块main 模块功能:选择一个功能菜单,执行相应的功能菜单。 输入输出:在系统内部没有输入输出。形式:int main()归属:InfoManagerMain 解决思路:通过应用switch语句,分别将各个功能菜单连接起来。再通过do循环语句, 使程序可以反复进行。 算法提纲:模块代码:#include #include #include Menu.h#include #define N 100#inc
4、lude InfoManager.h#includeInfo.hint main()Info infoAll100;int num=0;while(1)switch(choiceMenu()case 1:inputInfo(infoAll,100,&num);coutendl;break;case 2: displayInfo(infoAll,1000,num);coutendl;break;case 3:searchInfo(infoAll,100,num);coutendl;break;case 4: sortInfo(infoAll,100,num);coutendl; break; c
5、ase 5: saveInfo(infoAll,100,num);coutendl; break;case 6: loadInfo(infoAll,100,&num);coutendl; break;case 7:exit(0); default:cout提示出错endl;return 0;2.Menu.cpp模块功能:显示程序界面。输入输出 形式:int choiceMenu(void) 归属:Menu解决思路: 算法提纲:模块代码#include#include int choiceMenu(void)int choice;cout * *endl;cout 欢迎进入档案管理系统 *end
6、l;cout 1 基本信息录入 2 基本信息显示 *endl;cout 3 基本信息查询 4 基本信息排序 *endl; cout 5 基本信息保存 6 基本信息调入 *endl; cout 7 退出系统 *endl; cout 请选择功能号(1,2,3,4,5,6,7): *endl; cout *endl;scanf(%d,&choice);return choice;3. InfoManager.cppinputInfo模块功能:进行数据录入输入输出:形式:void inputInfo(Info *pInfoAll,int n,int*pNum)归属:InfoManager解决思路:若实
7、际输入人数等于n,停止输入,否则继续输入人数。算法步骤:第一步,判断人数是否等于n,选择Y或者N。第二步,选择Y继续输入工号、姓名、单位和部门编号,选择N停止输入。模块代码:void inputInfo(Info *pInfoAll,int n,int *pNum)if (*pNum=n)cout对不起,人数已满;elsecoutchoice;while (choice=y)coutpInfoAll*pNum.fNopInfoAll*pNum.fNamepInfoAll*pNum.fUnitpInfoAll*pNum.fUaDeNum;*pNum=*pNum+1; coutchoice;dis
8、playInfo模块功能:对输入数据进行显示。输入输出:形式:void displayInfo(Info *pInfoAll,int n,int num);归属:InfoManager解决思路:先显示工号、姓名、单位和部门编号。通过循环语句,对输入的所有工号、姓名、单位和部门编号进行输出。算法步骤:第一步:定义变量i,若i小于真实人数,输入第一个工号、姓名、单位和部门编号。第二步:令i递增,根据循环语句,对输入数据进行显示。模块代码:void displayInfo(Info *pInfoAll,int n,int num)coutt您要查询的资料显示结果如下:endl; coutt*endl
9、;coutt工号t姓名t单位t单位和部门编号tendl;for (int i=0;i=num-1;i+)coutti+1tpInfoAlli.fNotpInfoAlli.fName tpInfoAlli.fUnitpInfoAlli.fUaDeNum endl;coutt*endl; coutt您要查询的资料显示结束:endl; searchInfo模块功能:对输入数据进行查询。输入输出:形式:void searchInfo(Info *pInfoAll,int n,int num)归属:InfoManager解决思路:根据选择进行相应的工号、姓名、单位和部门编号查询。算法步骤:第一步:进行选
10、择 第二步:根据选择可以进行工号或姓名或单位或部门编号查询。模块代码:void searchInfo(Info *pInfoAll,int n,int num) int i;int choice;cout*endl;cout* 1 按工号查询 2 按姓名查询 *endl;cout* 3 按单位查询 4 按单位+部门编号查询 *endl;cout* 5 退出系统 *endl;cout* 请选择操作(1,2,3,4,5): *endl;cout*endl;cout请输入选项:choice;switch(choice)case 1:int no;coutno;for(i=0;inum;i+)if(p
11、InfoAlli.fNo=no) coutt 工号是pInfoAlli.fNot 姓名是pInfoAlli.fNamet单位是pInfoAlli.fUnitt 单位和部门编号是pInfoAlli.fUaDeNum;break;elsecout您要找的人不存在endl;break;case 2:char name1000;coutname1000;for(i=0;inum;i+)if(*pInfoAlli.fName=(name1000)coutt 工号是pInfoAlli.fNot 姓名是pInfoAlli.fNamet单位是pInfoAlli.fUnitt 单位和部门编号是pInfoAlli
12、.fUaDeNum;break;elsecout您要找的人不存在endl;break;case 3:char unit1000;coutunit1000;for(i=0;inum;i+)if(*pInfoAlli.fUnit=(unit1000)coutt 工号是pInfoAlli.fNot 姓名是pInfoAlli.fNamet单位是pInfoAlli.fUnitt 单位和部门编号是pInfoAlli.fUaDeNum;break;elsecout您要找的人不存在endl;break;case 4:exit(0); default:cout提示出错endl;sortInfo模块功能:对输入数
13、据进行排序。输入输出:形式:void sortInfo(Info *pInfoAll,int n,int num)归属:InfoManager解决思路:根据选择进行相应的工号、姓名、单位和部门编号排序。算法步骤:第一步:进行选择 第二步:根据选择可以进行工号或姓名或单位或部门编号排序。模块代码:void sortInfo(Info *pInfoAll,int n,int num)int choice;cout*endl;cout* 1 按工号排序 2 按姓名排序 *endl;cout* 3 按单位排序 4 按单位+部门编号排序 *endl;cout* 5 退出系统 *endl;cout* 请选
14、择操作(1,2,3,4,5): *endl;cout*endl;cout请输入选项:choice;switch(choice)case 1:for (int i=0;i=num-2;i+)for (int j=i+1;j0)Info t;t=pInfoAlli;pInfoAlli=pInfoAllj;pInfoAllj=t; break;case 2:for (int i=0;i=num-2;i+)for (int j=i+1;jpInfoAllj.fNo)Info t;t=pInfoAlli;pInfoAlli=pInfoAllj;pInfoAllj=t;break;case 3:for (
15、int i=0;i=num-2;i+)for (int j=i+1;j0)Info t;t=pInfoAlli;pInfoAlli=pInfoAllj;pInfoAllj=t;break;case 4:for (int i=0;i=num-2;i+)for (int j=i+1;jpInfoAllj.fUaDeNum)Info t;t=pInfoAlli;pInfoAlli=pInfoAllj;pInfoAllj=t;break;case 5:exit(0); default:cout提示出错endl;saveInfo模块功能:对输入的数据进行保存。输入输出:形式:void saveInfo(
16、Info *pInfoAll,int n,int num)归属:InfoManager解决思路:对输入的数据进行保存。算法步骤:第一步:定义一个Info.txt文件。第二步:分别读入第i个人的工号、姓名、单位和部门编号排序; 第三步:利用循环语句,将第i个数据后的所有数据都读入Info.txt文件中。模块代码:void saveInfo(Info *pInfoAll,int n,int num) FILE *pF;pF=fopen(Info.txt,w);for(int i=0;inum;i+)fprintf(pF,% d %s %s %d n,pInfoAlli.fNo,pInfoAlli.
17、fName,pInfoAlli.fUnit,pInfoAlli.fUaDeNum);fclose(pF); loadInfo模块功能:将保存的数据重新调入系统中。输入输出:形式:void loadInfo(Info *pInfoAll,int n,int *pNum)归属:InfoManager解决思路:将Info.txt中的数据调入到系统中。算法步骤:第一步:打开Info.txt文件,进行读取数据。第二步:当第i个数据有四个变量时,i自增; 第三步:利用循环语句,当第i个数据有四个变量时,将第i个数据后的所有数据都读取出来;第四步:关闭Info.txt文件。模块代码: void loadIn
18、fo(Info *pInfoAll,int n,int *pNum) int i=0;FILE *pF=fopen(Info.txt,r);while(fscanf(pF,%d %s %s %d n,&pInfoAlli.fNo,pInfoAlli.fName,pInfoAlli.fUnit,&pInfoAlli.fUaDeNum)=4)i+; *pNum=i; fclose(pF); 4.Menu.h#ifndef Menu_h#define Menu_hint choiceMenu(void);#endif5. InfoManager.h#ifndef InfoManager_h#defi
19、ne InfoManager_h#includeInfo.hvoid inputInfo(Info *pInfoAll,int n,int*pNum);void displayInfo(Info *pInfoAll,int n,int num);void searchInfo(Info *pInfoAll,int n,int num);void sortInfo(Info *pInfoAll,int n,int num);void saveInfo(Info *pInfoAll,int n,int num);void loadInfo(Info *pInfoAll,int n,int *pNu
20、m);#endif;6. Info.hstruct Infoint fNo;char fName100;char fUnit100;int fDeNum;#endif;问题编号出错信息改正办法1c:documents and settingsadministrator桌面infomanagerprojinfomanager.cpp(9) : error C2100: illegal indirection在num前面加*号2c:documents and settingsadministrator桌面infomanagerprojinfomanager.cpp(161) : error C20
21、65: strcmp : undeclared identifier在int main 之前加#include3error C2040: = : int * differs in levels of indirection from const intError executing cl.exe.将括号移到“=“之前项目总结本次实验经过我们组成员的辛苦努力下,终于编写出了程序代码并写出了实验报告。回想整个过程,我们先对档案管理系统做了一定的分析,然后进一步进行小组讨论,并明确自己的分工,在编写代码的时候,我们也有争论也有疑惑,但最终我们都克服了困难完成了任务,当我们看到从一开始的二十几个错误变
22、为后来的一两个错误到最后完全没有错误了时,内心有了一种说不出的喜悦与激动。总之,通过本次实验,我们了解到了我们需要掌握的知识,比如说文件操作、指针的使用、数组的运用、循环的使用等重要的知识都需要用入其中,并灵活运用,还要有一定的团队合作意识才能编出这个程序。在遇到问题时应沉着思考,积极讨论,这样才能尽早地完成任务。课程学习心得焦姣心得:在初学语言的一个学期后,我们进行了语言实训阶段,尝试编写一个比较复杂的程序系统。在为期一周的时间中,我的感受是:语言实训和平时上课所接触的程序是有很大不同的,所经受的考验和克服的困难是平时所无法比拟的。好在同组的搭档们精诚合作,分工明确,有问题共同解决,攻克了语
23、言实训的复杂程序。在这里,我作为其中的参与者,感触良多。在这次实训中,我对C语言有了一个更深的了解认识,也对这个学期学的知识得到巩固,还尝试运行编程,每次运行程序成功,让我对下面的项目就充满信心。通过自己与同学合作编写程序,最终把最初的理论知识转化基本技能。这次的实训,使我对C语言的学习产生浓厚的兴趣。还是这次实训,最令人激动的就是合作做项目,虽然那只是一个很小很小的项目。实训中深切体会到了老师认真负责的伟大的精神和热情为同学指导的促学方式,这种教学让我们自己学会了自学,学会了去看懂别人的代码。通过这次实训,也使我们发现了许多问题。在实训中,我们认识到自己还有很多的知识没学好,基础知识没理清,
24、而且许多东西还要去翻书,去上网搜索。而且遇到一些小错误运行不出来,就会烦躁不安,觉得有些自暴自弃或者抱怨项目的变态,以后要克服,尽量保持一颗良好的心态,学好C语言,也学好用C语言编写一个按要求的系统。还有就是对于未来,近程就是下学期,我觉得我还有许多方面需要提高。首先我要继续学习好C语言的基础知识,然后能在电脑上熟练的运用。然后每天都能写一些程序,上网时候多看一些优秀的教程和优秀的代码。遇到问题时多和同学讨论,并且多弄出几套方案,多锻炼自己结局问题的能力和与同学合作的能力。总之,这一切都成为我记忆里面的一个篇章,更是在C语言编程上的一个里程碑。朱孟亭心得:通过这学期的C语言学习,我对C语言程序
25、有了更深的认识,受益匪浅。刚上课的时候,看到复杂的程序很茫然,但在指导老师的帮助下,我慢慢进入了状态,很顺利的理解并能上机操作了。在学习过程中,我意识到了预习的重要性,不仅可以先对要学的知识有一定程度的了解,而且可以发现问题,上课时可以重点解决问题。看书是很重要的,上机操作更是关键。有时候想出的程序和实际操作出的程序是不一样的,我深深体会到了实践的重要性。在学习中不断相互促进、不断进步,让我们了解到团队合作的重要性。学习语言是需要技巧的,无论是哪种语言,里面都是有规律的。对于计算机语言来说,我认为应该先理解,然后上机去实现它,因为实践是检验真理的唯一标准。C+语言课程是一门实践性很强的课程,一
26、定要动手多写设计、编写程序才能有所进步。在实践教学中必须做到循序渐进,对所学的每一部分内容都应该要求自己完成一定数量的实验内容。每部分的上机习题必须认真完成。自己编写的程序一定要到机器上去实现,通过调试程序来修订语法错误,排除逻辑错误,进而提高编程能力,通过做一定量的习题,可以积累一定的经验,真正的收获更多是思想上的,让我认识程序的复杂,“学无止境”头一次认识的这么深刻,察觉自己的不足。以后的学习生活真的要踏踏实实,不断努力。陈青青心得:通过c语言实训,让我加深了对c语言的了解,而不只是单单的在课本中学到的那些理论,平时乏味的课程,通过自己动手亲自编写,变的生动有趣,而在自己动手的过程中,出现
27、的问题很多,比理论要难的多,当一个程序写完以后,经常会有很多错误而没法解决。不过,通过这学期的实训,逐渐积攒了一些经验,有些错误可以很快就看出来。这次实训有很大的收获,让我对c语言有了更深的认识,平时在课堂上学到的东西可以自己动手编写,将其转化成一些实用的技能。如果是一个程序写完一处错误也没有,会有种成就感,于是兴趣就来了,兴趣来了,自然学的东西也就多了,能把理论变成实际的技能,让我对c语言有了浓厚的兴趣和更深层的认识。c语言是一个有序的学习,学了最基本的替换,然后扩展到循环,嵌套,条理很清楚,不是一个零散的知识,实际上所有的课程都如此,不过通过实训我也知道了自己的不足,存在的很多问题。比如自
28、己写的写的小程序出了问题,不会解决了就叫老师帮忙,虽然说一定意义上增加了师生之间的感情,但是会养成一种依赖的心理,碰到问题了第一个想到的是求助而不是自己独立解决,所以以后要多多锻炼自己的信心和增加自己的能力,争取做到老师不在身边的时候也可以完成一些简单的程序编写与错误排除。还有自己的基础知识不扎实,遇到的问题,没有很好的逻辑思维,亲自编写一个陌生的程序的时候会有种无法下手的感觉,找不到突破口。通过实训,逐渐理清了顺序,对于简单的程序和一些相对比较繁琐的嵌套,循环,不在是看着一头雾水。其实只要理清了思路,把基础知识掌握了,然后有条不紊的分析,一步一步理解,c语言还是很有意思的课程。自己亲自动手编
29、写程序让我增加了对c语言程序开发环境的了解,在上课的时候老师就讲,学习c语言最重要的是学习c语言的逻辑思维,不管以后从事什么行业,学习c语言都对自己的职业很有帮助,如果是从事编程工程工作的话,就更有帮助了,即使以后的编程工作可能不用c语言,但是拥有扎实的c语言基础是对工作很有用的。这些都要感谢老师的教导。汪翠翠心得:我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,更多的在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。由于时间的关系,我们的这次实习课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作
30、。包括了程序模块处理.简单界面程序.高级界面程序.程序的添加修改.用程序做一元线性回归处理以及用c语言程序来画粒度分布图等这几样比较重要的时间操作。上机实验是学习程序设计语言必不可少的实习环节,特别是c语言灵活、简洁,更需要通过编程的实习来真正掌握它。对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。有时你认为万无一失的程序,实际上机运行时可能不断出现麻烦。如编译程序检测出一大堆错误。有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的
31、上机经验分析判断错误所在。程序的调试是一个技巧性很强的工作,对于初学者来说,尽快掌握程序调试方法是非常重要的。有时候一个消耗你几个小时时间的小小错误,调试高手一眼就看出错误所在。InfomanagerMain.cpp#include #include #include Menu.h#include #define N 100#include InfoManager.h#includeInfo.hint main()Info infoAll100;int num=0;while(1)switch(choiceMenu()case 1:inputInfo(infoAll,100,&num);cou
32、tendl;break;case 2: displayInfo(infoAll,100,num);coutendl;break;case 3:searchInfo(infoAll,100,num);coutendl;break;case 4: sortInfo(infoAll,100,num);coutendl; break; case 5: saveInfo(infoAll,100,num);coutendl; break;case 6: loadInfo(infoAll,100,&num);coutendl; break;case 7:exit(0); default:cout提示出错en
33、dl;return 0;Infomanager.cpp#include InfoManager.h#include #includeInfo.h#includestring.h#include#include void inputInfo(Info *pInfoAll,int n,int *pNum)if (*pNum=n)cout对不起,人数已满;elsecoutchoice;while (choice=y) coutpInfoAll*pNum.fNopInfoAll*pNum.fNamepInfoAll*pNum.fUnitpInfoAll*pNum.fDeNum;*pNum=*pNum+1; coutchoice;void displayInfo(Info *pInfoAll,int n,int num)coutt您要查询的资料显示结果如下:endl; coutt*endl;coutt序号t工号tt姓名tt单位t部门编号tendl;for (int i=0;