




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
HUNAN UNIVERSITY程序设计训练报 告学生姓名 XX XX 学生学号_ 专业班级 电自1105 指导老师 _ 院长 (系主任) _ 2012 年06 月 13 日目录1软件开发平台12软件功能说明12.1功能分析说明图12.2各项功能说明33软件设计详细内容53.1采用的主要数据结构类型53.2流程图54软件测试84.1软件测试用例84.2软件测试报告85总结和致谢136附录136.1软件使用说明136.2源码166.3参考文献26231 软件开发平台Windows XP Visual C+2 软件功能说明职员信息管理系统2.1 功能分析说明图主模块和每个功能模块职工工资信息管理系统主菜单menu()输入模块enter()新增模块add()浏览模块browse()排序模块order()按姓名查询search_1()查询模块search()按工资卡号查询search_2()退出exit(0)按实发工资排序order_2()按工资卡号排序order_1()2.2 各项功能说明(1)工资信息采用结构体数组:struct list int num; /工资卡号 char name20; /姓名 int month;/月份 int salary1; /应发工资 int water;/水费 int electrisity; /电费 float fax; /税金 float salary2; /实发工资listN; /listN中每个数组元素对应一个职工工资信息(2)输入模块 按照工资卡号、姓名、月份、应发工资、水费、电费的顺序输入信息,税金和实发工资根据输入的信息进行计算得到,这些信息被录入到文件中。文件操作函数:fopen,fwrite,fclose.税金的计算:if(应发工资800&应发工资1400) 税金=(应发工资-1400)*10%;实发工资=应发工资-水费-电费-税金。(3)新增模块增加新的职工工资信息,从键盘输入并逐条写到原来的输入文件中,采用追加而不是覆盖的方式(以”ab”方式打开文件)。(4)浏览模块 调用排序模块的排序功能,可以浏览排序后的所有职工信息。(5)排序模块排序模块提供菜单选择,实现按照工资卡号升序、实发工资升序排序。排序方法可以选择冒泡排序、插入排序、选择排序等,本系统用的是冒泡排序。(6)查询模块实现按照工资卡号和姓名的查询,采用基本的查找方法即可。3 软件设计详细内容3.1 采用的主要数据结构类型 #include#include#include#include二维数组 3.2 流程图上1主函数提供输入、处理和输出部分的函数调用,各功能模块采用菜单方式选择。开 始显示一系列的功能选择输入n,判断n是否是0到6NY根据n值调用各功能模块2.添加模块 开 始输入职工数目浏览职工信息输入各项信息返回?1储存职工信息2主菜单2.新增模块 开 始输入新增职工数目输入新职工信息浏览职工信息1返回?储存输入信息2主菜单3.浏览模块开 始从磁盘中导出信息输出各职工信息返回主菜单4.排序模块 开 始输入n判断n是否是0到2NY12浏览职工信息按实发工资排序按工资卡号排序返回?输出12主菜单5.查询模块开 始输入n判断n值NY浏览职工信息12按卡号查询按姓名查询1返回?输出主菜单24 软件测试4.1 软件测试用例1、主函数运行,显示主菜单函数menu()2、输入数字1,添入两组数据3、如果输入数字2,新增一组数据并浏览4、输入数字3,浏览所有职工信息5、输入4,进行查询程序,再输入1 ,按姓名查询,输入2 ,按工资卡号查询6、输入数字5,进行排序程序,输入1 ,按卡号排序,输入2按实发工资排序。4.2 软件测试报告标号项目预期结果实际结果出错原因出错次数01主界面较美观的菜单完成预期结果无无02添加数据按1后,添加了数据完成预期结果无无03新增数据并浏览按2后,新增了数据并能浏览完成预期结果无无04浏览所有职工信息按3后,浏览所有职工信息完成预期结果无无05查询职工信息按3后进入查询,输入1按姓名查询,输入2,按工资卡号查询完成预期结果无无06对职工进行排序按5后,进行排序。输入1,按卡号排序,输入2按实发工资排序完成预期结果无无5 总结和致谢 经过一学期的C语言学习,我们掌握了C语言的基础知识,能够读懂别人用c语言设计的程序。平时的程序设计大多是以填空的形式出现,虽然有所接触,但都不完全。而这次的课程设计,却让我们完完全全用自己学到的知识编写一个完整的体统程序。这是一个新的挑战,也是一种新的学习。 我们组选择的题目是第一个职工工资信息管理系统。初看到这个题目觉得很简单,但当我做到电脑前准备开始编写代码的时候才发现无从下手。通过去图书馆查找程序设计相关的书籍,和上网参考前人编写的类似程序,我们脑中才有了一个大概方向。 几天都在宿舍整个下午的对着电脑不断的编译、调试、修改,每次编好一个能够成功运行的程序,都会感到很欣慰,但自己编的程序自己很难发现当中的错误,而电脑又没有提示的时候就很受打击,也会着急。但可以先放一放,让脑子休息一下,忘掉错误的记忆。或许等过段时间再回过头来,就会很容易的发现之前的错误了。随着编好的程序越多,累积的经验也越多,查找错误就越快了。还有会发现很多程序有很多相似之处,可以通过复制修改的发式来编写。虽然题目要求只需要一种查询方式,但当我们编出规律之后自然就想多写两个,写完就会有很大的成就感了。 总之,经过这一次的课程设计,我体会到成功的来之不易。当最后一次成功串联运行所有函数时,真的很开心。通过这次实践,我们能够更熟练掌握C语言,特别是循环和文件,当时在课堂上没有学太清楚的,这个程序设计之后都很明白了。C语言是一个有序的学习,学了最基本的替换,然后扩展到循环、嵌套,条例很清楚,不是一个零散的知识,实际爱好难过所有的客车个都如此,不过通过实习我也知道了自己的不足,存在很多的问题。比如自己些的小程序出了问题,不会了就叫老师或同学帮忙,虽然这样能节约时间,但是会样成一种依赖心理,碰到问题就是首先想到求助而不是自己解决,所以以后要多多锻炼自己的信心和增加自己的能力,争取可以做到自己可以做到一些简单的程序编写和错误排除。还有自己的基础知识不扎实,遇到的问题,没有很好的逻辑思维,亲手编写一个新的程序的时候会有种没法下手的感觉,找不到突破口,通过实习逐渐理清了顺序,对于简单的程序和相对比较繁琐的嵌套、循环,不再是看着一头雾水。其实知识理清了思路把基础知识掌握了,然后有条不紊地分析,一步一步理解,C语言还是很有意思的课程。我们不仅巩固了基础知识,并有这样的一个机会自己独立编写程序,自学能力得到了很大的培养。在实习过程中,首先我要感谢老师,理论课老师通俗易懂的教学方法使得我把所学知识掌握牢固,实习阶段的老师耐心解答我们的问题。最后,我还要感谢给我帮助的同学,在一些程序问题上,我们和同学交流经验,学到了很多在书本上学不到的东西,对一些自己学习的盲区进行了攻破,充分认识到自己的不足,提高了很多。所以,感谢在这次实习中和我互相帮助的人!5.1 软件使用说明、主函数运行,显示主菜单函数menu()2、输入数字1,添入两组数据3、如果输入数字2,新增一组数据并浏览4、输入数字3,浏览所有职工信息5、输入4,进行查询程序,再输入1 ,按姓名查询,输入2 ,按工资卡号查询6、输入数字5,进行排序程序,输入1 ,按卡号排序,输入2按实发工资排序。5.2 源码#include#include#include#include#define N 50void main() void menu(); menu();void menu() /主菜单函数 void enter(); void add(); void browse(); void search(); void order(); int n,w1; do puts(tt*MENU*nn); puts(ttt 1.Enter ); puts(ttt 2.Add); puts(ttt 3.browse all); puts(ttt 4.Search ); puts(ttt 5.Order ); puts(ttt 6.Exit); puts(nntt*n); printf(Choice your number(1-6):bb); scanf(%d,&n); if(n6) /*对选择的数字进行判断*/ w1=1; getchar(); else w1=0; while(w1=1); switch(n) case 1:enter();break; /*输入模块*/ case 2:add();break; /*新增模块*/ case 3:browse();break; /*浏览模块*/ case 4:search();break; /*查找模块*/ case 5:order();break; /*排序模块*/ case 6:exit(0); /*退出模块*/ struct list /结构体定义工资信息 int num; /工资卡号 char name20;/姓名 int month;/月份 int salary1; /应发工资 int water;/水费 int electrisity; /电费float fax; /税金 float salary2; /实发工资listN; /listN中每个数组元素对应一个职工工资信息void enter() /输入模块函数 void printf_back(); void save(int n); void input(int i); int i,n; printf(how many workers (1-%d)?:,N-1); scanf(%d,&n); /输入职工数目 printf(n enter date nownn); for(i=0;in;i+) /输入职工各项信息 printf(n input %dth student record.n,i+1); input(i); /调用职工信息输入函数 if(i!=0)save(n); /储存职工信息 printf_back(); /执行返回函数void add() /新增模块函数 void printf_back(); int i,n,m,k; int load();void save(int n); void input(int i); FILE *fp; /定义文件指针变量 n=load(); /导出文件信息,得到返回值 printf(how many workers are you want to add(0-%d)?:,N-1-n); scanf(%d,&m); /输入新增职工数目 k=m+n; /总职工数= 新增职工数+已有职工数 for(i=n+1;i=k;i+) /输入新增职工信息 printf(n input %dth workers record.n,i-n+2); input(i); /调用职工信息输入函数 fp=fopen(workers.txt,ab); /以追加形式打开文件 for(i=n+1;i=k;i+) fwrite(&listi,sizeof(struct list),1,fp); /将内存中的职工信息输出到磁盘文件中save(n); /储存输入信息 fclose(fp); /关闭文件 printf_back(); /执行返回函数 void browse() /浏览模块函数 void printf_one(int i); void printf_face(); int load(); void menu(); int i,n; n=load(); printf_face(); for(i=0;in;i+) if(i!=0)&(i%10=0) /以10个职工为一组输出 printf(nnpass any key to continue.); getch(); puts(nn); printf_one(i); /输出各职工信息printf(n); printf(t there are %d recode.n,n); printf(n pass any key to back.); getch(); menu(); /返回主菜单 void search() /查询模块函数 int n,w1; do puts(ttt1.search by name); /按姓名查询 puts(ttt2.search by num); /按工资卡号查询 scanf(%d,&n); if(n2) w1=1; getchar(); else w1=0; while(w1=1); switch(n) void search_1(); void search_2(); case 1:search_1();break; case 2:search_2();break; void search_1() /按姓名查询 int load(); void printf_face(); void menu(); void printf_one(int i); int i,n,k,w1=1,w2,w3,w4; struct list s; n=load(); /导出文件信息,得到返回值 do do k=-1; printf(nnenter name that you want to search! name:); scanf(%s,); /输入要查找的姓名 printf_face(); /输出职工信息项目 for(i=0;in;i+) if(strcmp(,)=0) /查询出与输入姓名相同的职工的信息 k=i; printf_one(k);break; /输出查询结果并中断,说明只能输出查到的第一个数据 if(k=-1) /如果没有查出信息则执行如下选择菜单 printf(nn NO.exit!please); printf(nnare you again?nt1).again 2).NO and back bb); scanf(%d,&w1); if(w1=2)break; while(k=-1&w1=1); /选择1继续循环执行查询 w4=0;w3=0; if(k!=-1) printf(successful); printf(nn what do you want to do?nt1).search another 2).back bb); /选择查找下一个数据或返回 scanf(%d,&w2); while(w2=1); /选择1循环执行查询下一个数据 menu(); void search_2() /按工资卡号查询 int load(); void printf_face(); void menu(); void printf_one(int i); struct list s; int i,n,k,w1=1,w2,w3,w4; n=load(); do do k=-1; printf(nnenter num that you want to search! num:); scanf(%d,&s.num); /输入要查找的工资卡号 printf_face(); /输出职工信息项目 for(i=0;in;i+) if(s.num=listi.num) /查询出与输入工资卡号相同的职工的信息 k=i; printf_one(k);break; if(k=-1) /如果没有查出信息则执行如下选择菜单 printf(nn NO.exit!please); printf(nnare you again?nt1).again 2).NO and back bb); scanf(%d,&w1); if(w1=2)break; while(k=-1&w1=1); /选择1继续循环执行查询 w4=0;w3=0; if(k!=-1) printf(successful); printf(nn what do you want to do?nt1).search another 2).back bb); scanf(%d,&w2); while(w2=1); /选择1循环执行查询下一个数据 menu(); void order() /排序功能模块函数 int w1,n; void order_1(); void order_2(); do puts(ttt1.order by num); /按工资卡号排序 puts(ttt2.order by salary 2); /按实发工资排序 scanf(%d,&n); if(n2) w1=1; getchar(); else w1=0; while(w1=1); switch(n) case 1:order_1();break; case 2:order_2();break; void order_1() /按工资卡号升序排序 int load(); void printf_back(); void save(int i); int i,j,n;void browse();struct list s; n=load(); for(i=0;in-1;i+) /冒泡排序法,按职工工资卡号升序排列出职工信息 for(j=i+1;jn-1;j+) if(listj.numlisti.num) s=listj; listj=listi; listi=s; save(n); /储存排序后的信息browse(); /显示排序后的信息 puts(nn); printf_back(); /执行返回函数 void order_2() /按实发工资升序排序 int load(); void printf_back(); void save(int i); int i,j,n; struct list s; void browse(); n=load(); for(i=0;in-1;i+) /冒泡排序法,按实发工资升序排列出职工信息 for(j=i+1;jn-1;j+) if(listi.salary2listj.salary2) s=listj;listj=listi;listi=s; save(n); /储存排序后的信息browse(); /显示排序后的信息 puts(nn); printf_back(); /执行返回函数 void save(int n) /储存函数 FILE *fp; int i; fp=fopen(workers.txt,wb); /以只写方式打开文件 for(i=0;in;i+) fwrite(&listi,sizeof(struct list),1,fp); /将内存中的职工信息输出到磁盘文件中 fclose(fp); /关闭文件 int load() /导出文件信息 FILE *fp; int i; fp=fopen(workers.txt,rb); /以只读方式打开文件 for(i=0;!feof(fp);i+) fread(&listi,sizeof(struct list),1,fp); /读出磁盘文件中的职工信息 fclose(fp); /关闭文件 return(i-1); /返回数值i-1 void input(int i) /职工信息输入函数 float salary2(int i); float fax(int i); printf(No.:); scanf(%d,&listi.num); printf(name:); scanf(%s,); printf(month:); scanf(%d,&listi.month); printf(salary1:); scanf(%d,&listi.salary1); printf(water:); scanf(%d,&listi.water); printf(electricity:); scanf(%d,&listi.electrisity); fax(i); /计算税金 salary2(i); /计算实发工资 float f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高速铁路站充电桩租赁及电力接入协议
- 道路测量与交通安全评估合同
- 车辆转让与汽车租赁市场管理服务协议
- 公共设施安全维护包工合同范本
- 财务兼职人员合同续签及终止协议
- 城市公交车辆挂靠经营权转让合同
- 二手房屋转租权转让与居住权协议
- 车辆租赁及汽车租赁企业培训协议
- 高端写字楼出售与长期租赁管理协议
- 车祸责任承担及损害赔偿协议模板
- GA/T 2000.301-2022公安信息代码第301部分:资金查控措施类型代码
- GB/T 18838.5-2015涂覆涂料前钢材表面处理喷射清理用金属磨料的技术要求第5部分:钢丝切丸
- 静电接地报警器危害分析
- 2022年湖南省高中学业水平合格考物理试卷真题(答案详解)
- 法在我心中-主题班会课件
- 健康、健康公平和健康决定因素定义和内容
- 痛风诊治进展p
- 贵州省遵义市各县区乡镇行政村村庄村名明细及行政区划划分代码居民村民委员会
- 机械原理课程设计-自动打印机设计说明书
- 2022更新国家开放大学电大《西方行政学说》机考4套真题题库及答案1
- 城市防洪排涝规划编制大纲解读
评论
0/150
提交评论