1、目 录目 录1一、设计目标1二. 设计内容2三概要设计31.功效模块图32各个模块具体功效描述。4四具体设计51、输入统计模块52、插入统计模块63、删除统计模块(具体步骤图图所表示)64、函数功效描述7五 测试数据及运行结果81.系统主界面82.输入界面93.输出老师信息界面114. 插入老师信息界面12六调试情况,设计技巧及体会12附录 源代码13一、设计目标本程序意在训练基础编程能力,了解管理信息系统开发步骤,熟悉C语言文件和结构数组多种基础操作。本程序包含结构体、数组、指针、文件等方面知识。经过本程序训练,使读者能对C语言文件操作有一个更深刻了解,掌握利用数组存放结构实现老师工资管理系
2、统,为深入开发出高质量信息管理系统打下坚实基础。(1)巩固和加强C+语言程序设计课程理论知识。(2)掌握+语言基础概念、语法、语义和数据类型使用特点。(3)掌握+语言程序设计方法及编程技巧,能正确使用+语言编写程序。(4)深入了解和利用结构化程设计思想和方法;学会利用步骤图表示算法。(5)掌握调试程序基础方法及上机操作方法。(6)掌握书写程设计开发文档能力,学会撰写课程设计总结汇报。课程设计思想和方法还能够作为毕业论文时参考资料。(7)经过查阅手册和文件资料,培养自己独立分析问题和处理问题能力。为自己做毕业设计打好基础。(8)初步掌握开发一个小型实用系统基础方法:结合实际应用要求,使课程设计既
3、覆盖知识点,又靠近工程实际需要。经过激发学习爱好,调动自己主动学习主动性,并依据实际编程要求,训练自己实际分析问题能力及编程能力,并养成良好编程习惯。(9)培养自己创新能力和创新思维。能够依据指导书和相关文件上参考算法,自己设计出对应应用程序。(10)培养自己良好程序设计风格。在实际编程中,为了提升编程质量,对空行、空格和注释全部有要求。自己在课程设计书写代码时,应该严格按要求处理,方便建立良好程序设计风格。二. 设计内容每个老师信息为:老师号、姓名、性别、单位名称、家庭住址、联络电话、基础工资、津贴、生活补助、应发工资、电话费、水电费、房租、所得税、卫生费、公积金、累计扣款、实发工资。注:应
4、发工资=基础工资+津贴+生活补助;累计扣款=电话费+水电费+房租+所得税+卫生费+公积金;实发工资=应发工资 累计扣款。1、老师信息处理(1) 输入老师信息(2) 插入(修改)老师信息:(3) 删除老师信息:(4) 浏览老师信息:提醒:具体功效及操作参考题1。2、老师数据处理(1) 按老师号录入老师基础工资、津贴、生活补助、电话费、水电费、房租、所得税、卫生费、公积金等基础数据。(2) 老师实发工资、应发工资、累计扣款计算。提醒:计算规则如题目。(3) 老师数据管理提醒:输入老师号,读出并显示该老师信息,输入新数据,将改后信息写入文件(4) 老师数据查询:提醒:输入老师号或其它信息,即读出全部
5、数据信息,并显示出来。(5) 老师综合信息输出提醒:输出老师信息到屏幕。三概要设计1.功效模块图主界面选择操作1输入老师信息2插入老师信息3修改老师信息老师工资管理系统4删除老师信息5浏览老师信息6系统信息结 束7退出系统图1老师工资系统功效模块图2各个模块具体功效描述。(1)输入老师信息模块在主菜单中利用结构体teacher,输入老师信息,首先建立链表,将用户输入学生信息存放到链表中,输入完成后提醒用户时候继续输入,假如用户输入“Y”或“y”,则再次调用,实现继续输入学生信息操作。假如用户输入“N”或“n”,则返回主菜单界面。(2)插入老师信息模块在主菜单中调用teacher *insert
6、(),然后根据提醒依次输入老师信息,然后再调用void print()函数讲全部老师信息统计打印出来。然后再返回主菜单界面。(3)修改老师信息模块在主菜单中调用void edit()函数。按老师号查找老师信息,假如找到老师信息,调用void edit()函数提醒用户输入新老师信息,完成修改操作。操作结束后提醒用户修改成功。然后返回主菜单界面。(4)删除老师信息模块在主菜单中调用del()函数,以删除老师信息,首先按学号查询老师信息,假如没有找到老师信息,给出提醒信息。假如查找到该老师信息,给出改老师全部信息,假如查找到,则删除该老师信息,给出删除成功提醒信息。然后返回主菜单界面。(5)浏览老师
7、信息模块在主菜单中调用void print()函数来显示老师信息,先判定链表是否为空。假如链表不为空时,逐条显示链表中老师信息,显示调用teacher *next()函数根据老师号大小来显示老师信息。然后返回主菜单界面。(6)系统信息模块 在主菜单中输入6,可知系统信息、版本。(7)退出系统模块将链表中数据全部释放掉,预防内存泄露。退出系统。四具体设计1、输入统计模块输入老师信息步骤图以下图。首先要开辟一个新节点,并使p1,p2指向它。读入一个老师数据给p1所指节点。此时要使head=NULL,n=0,而且p1-num!=0。开辟一个新节点,并使P1,p2指向它读入一个老师数据给P1所指结点
8、Head=NULL & n=0 num!=o N=n+1 N=1 真 假Head=p1 p2-next=p1把p1所指结点 把p1所指结点作为第一结点 连接到表尾 P2=p1再开辟一个新结点,使p1指向它读入一个老师数据给p1所指结点具体步骤图图:2、插入统计模块插入统计模块具体步骤图以下图所表示: P1=head , p0=teacher 原来链表是空表是 否 当p0-nump1-num和p1所指不是表尾结点 P2指向p1位置 P1向后移一个结点 P0-numnum将p0所 真 假指结 p1指向头结点 点作为 是 否 p1-next=p0唯一 head=p0 p2-next=p0结点 p0-
9、next=p1 p0-next=p1 p0-next=NULLf 链表是一个空链表真 假 P1=head输 当num!=p1-num和p1所指结点不是表尾结点 P2=p1出 P1=p1-next P1是要删除结点 是 否空 p1所指头结点 是 否 输出找不到表 head= p2-next= 老师信息 P1-next p1-next3、删除统计模块(具体步骤图图所表示)4、函数功效描述(1) 保留数据函数save()函数原型:void save()功效描述:将链表teacher中N个数据写入到磁盘文件teacher_list中,假如保留成功,则给出提醒保留成功,不然返回“cannot ofen
10、file”表示无法打开文件,返回“file write error”表示文件输入错误。(2)浏览老师信息函数query()函数原型:void query(struct teacher *p)功效描述:将链表teacher中head指向p,然后让用户输入老师号no,依次在链表中需找p,假如老师号不对,则指针往后面拨动一下,使p=p-next;知道找到相对应正确老师号。然后打印出老师基础信息。函数步骤图图5.2 所表示p=head p-num=no p-num!=no p=p-next 打印老师信息 图5.2(3) 修改老师信息函数edit()函数原型:void edit(struct teach
11、er *p)功效描述:首先让用户输入期望修改老师老师号a, 然后在链表中一条一条查找看p-num是否等于a,假如找到,则让用户再次输入老师具体信息,输入完成跳出,转向主菜单界面。假如没有找到,则令p=p-next。直到查询完全部老师统计。函数步骤图图5.3 所表示输入想修改老师信息老师号ap-num=a Yes no p=p-next再次输入老师信息五 测试数据及运行结果1.系统主界面 用户刚进入系统时,图1、2所表示。主菜单界面: 图1 图 22.输入界面用户在主菜单界面时候输入1,显示图 图2依次给出需要输入信息,老师号、姓名、性别、单位名称、家庭住址、联络电话、基础工资、津贴、生活补助、
12、电话费、水电费、房租、所得税、卫生费、公积金等。当公积金输入完成,系统将给出提醒是否想继续输入老师信息,显示图假如输入Y或y,则继续输入老师信息;假如输入N或n,则返回到主菜单界面。显示以下图:3.输出老师信息界面 假如已经输入老师信息,再在主菜单选择4浏览老师信息,结果图:4. 插入老师信息界面 在主菜单中进入2插入老师信息,然后依次插入老师全部信息,最终打印链表里统计,图:六调试情况,设计技巧及体会 连续一个学期课程设计给了我太多感慨,开始从题目上看,感觉题目很大,设计量很大,也很复杂,感觉不是简单就能处理。这么只用重新捡起书继续来看,取得新知识和巩固以前C方面知识。提升自己能力。整个程序
13、设计是分模块实现具体功效,每个模块分别由不一样函数组成。链表建立实现输入信息功效,相比较于数组愈加方便,更能够节省内存空间等。经过使用文件fread和fwrite函数方便将数据信息写入文件和将文件中信息载入显示段。经过这个学期课程设计练习和设计我学会了很多,也愈加熟悉C语言程序设计,从中得到了很多乐趣,很愉快,感觉C语言世界里面奇妙无比。即使在途中也碰到很多苦难,不过还是经过问同学和学长处理了。最终看到自己设计程序能够运行起来尤其快乐。这次程序设计很有意义,也很锻炼人能力,尤其是C语言方面能力,为自己在C+语言方面打下基础。附录 源代码#include#include#include#incl
14、ude#includeusing namespace std;int i;class Person public: void display() cout name; cout num;while(num=0)cout请重新输入工号大于0数:num; string name;/名字 int num;/工号class Teacher: public Person/老师public: Teacher() int s=1000; wage = s;butie1=0; void display1(); int wage;/基础工资 int time;int butie1;int jintie1;/课时
15、void Teacher:display1() cout 请输入; Person:display(); cout time;while(time=0)cout请重新输入课时大于0数:time;/补助Teacher t100;Leader x100;Jianzhi j100;void show() cout t请输入你要录入对象 : endl; cout tt 1:老师 endl; cout tt 2:领导 endl; cout tt 3:老师兼职领导 endl; cout tt 4:退出录入 endl; cout 请选择: ;void jiaoshiluru()/老师录入 ofstream o
16、utfile(老师.txt, ios:app); if (!outfile) cerr open error! endl; exit(0); int b; cout b; for (i = 0; i b; i+) ti.display1();cout是否保留信息(y(Y)/n(N)c;if(c=Y|c=y) outfile ti.num ti.name ti.wage ti.time c; if (c = 4) cout 退出录入成功。 endl; system(cls); break; else switch (c) case 1: jiaoshiluru(); break; case 2:
17、 Leaderluru(); break; case 3: jianzhiluru(); break; default: cout 上一次输入错误。 endl; break; void jiaoshishuchu()/老师输出显示 ifstream infile(老师.txt, ios:in); int m; for (i = 0; i ti.num ti.name ti.wage ti.time;if (ti.num = 0) break; int jintie1; jintie1=ti.time*30; m = ti.wage + jintie1;cout t老师: setw(8) ti.
18、num setfill( )setw(10) ti.name setfill( )setw(10)ti.wagesetfill( )setw(14)jintie1setfill( )setw(12)ti.butie1setfill( )setw(10) m endl; infile.close();void leadershuchu()/领导输出 ifstream infile(领导.txt, ios:in); int m; for (i = 0; i xi.num xi.name xi.wage xi.butie; if (xi.num = 0) break; m = xi.wage + x
19、i.butie; cout t领导: setfill( )setw(8)xi.num setfill( )setw(10) xi.name setfill( )setw(10)xi.wagesetfill( )setw(14)xi.jintiesetfill( )setw(12)xi.butiesetfill( )setw(10) m endl; infile.close();void shuchu()/输出显示 cout tt 工号 名字 基础工资 课时津贴 补助 总工资 endl; jiaoshishuchu(); leadershuchu(); jianzhishuchu();void
20、show3() cout t请输入你要查询对象: endl; cout tt 1:老师查询 endl; cout tt 4:退出查询 endl; cout 请选择一个操作:; void jiaoshichaxun() ifstream infile(老师.txt, ios:in); string nam; int num; int m, n,x; couttt1.按老师姓名查找ntt2.按老师工号查找; coutx; switch(x) case 1:coutnam; for (i = 0, n = 0; i ti.num ti.name ti.wage ti.time; if (ti.num
21、 = 0) break; if (ti.name=nam) n+; m = ti.wage + (ti.time - 24) * 30;couttt工号 姓名 工资endl; cout t老师: ti.num ti.name m endl; if (n =0) cout 没有你要查询老师。 endl; infile.close();break;case 2: coutnum; for (i = 0, n = 0; i ti.num ti.name ti.wage ti.time; if (ti.num = 0) break; if (ti.num=num) n+; m = ti.wage +
22、(ti.time - 24) * 30;couttt工号 姓名 工资endl; cout t老师: ti.num ti.name m endl; if (n =0) cout 没有你要查询老师。 endl; infile.close();break;default:cout操作选择错误! c; if (c = 4) cout 退出查询成功。 endl; system(cls); break; ; else switch (c) case 1: jiaoshichaxun(); break; case 2: leaderxhaxun(); break; case 3: jianzhichaxun
23、(); break; default: cout 上一次输入错误。 endl; break; void show5() cout t请输入你要修改对象: endl; cout tt 1:老师修改 endl; cout tt 2:老师兼职领导修改 endl; cout tt 3:退出修改 endl; cout 请选择一个操作:;void jiaoshixiugai()/老师修改 ifstream infile(老师.txt, ios:in); string nam; int n, n1, m1 = 0; cout nam; cout n; for (i = 0; i ti.num ti.name
24、 ti.wage ti.time; if (ti.num = 0) break; m1+; if (ti.name =nam) n1 = ti.time; ti.time = n; n = n1; infile.close(); ofstream outfile(老师.txt, ios:out); for (i = 0; i m1; i+) outfile ti.num ti.name ti.wage ti.time c; if (c = 3) cout ttt退出修改成功。 endl; system(cls); break; else switch (c) case 1: jiaoshixi
25、ugai(); break; case 2: janzhi2xiugai(); break; default: cout 上一次输入错误。 endl; break; void show6() cout t请选择以下操作: endl; cout t1:老师删除 endl; cout t2:领导删除 endl; cout t3:老师兼职领导删除 endl; cout t4:退出删除 endl; cout 请选择你一个操作: ;void jiaoshidel()/老师删除 ifstream infile(老师.txt, ios:in); string nam;int num; int n,x; co
26、uttt1.按老师姓名删除ntt2.按老师工号删除; coutx; switch(x) case 1:coutnam; for (i = 0, n = 0; i ti.num ti.name ti.wage ti.time; if (ti.num = 0) break; if (ti.name=nam) n+;ti.num=0;break; if (n =0)cout 没有你要删除老师。 endl;elsecout删除成功!endl; infile.close();break;case 2: coutnum; for (i = 0, n = 0; i ti.num ti.name ti.wag
27、e ti.time; if (ti.num = 0) break; if (ti.num=num) n+; ti.num=0;break; if (n =0) cout 没有你要删除老师。 endl;elsecout删除成功endl; infile.close();break;default:cout操作选择错误!endl;break; infile.close(); ofstream outfile(老师.txt, ios:out); for (i = 0; i 100; i+) if (ti.num != 0) outfile ti.num ti.name ti.wage ti.time
28、endl; outfile.close(); void show_sort() cout 请选择以下操作: endl; cout tt 1:老师排序 endl; cout tt 2:老师兼职领导排序 endl; cout tt 3:退出排序 endl; cout 请选择你一个操作: ;void jiaoshi_sort() /老师排序 ifstream infile(老师.txt, ios:in); int m100; for (i = 0; i ti.num ti.name ti.wage ti.time; if (ti.num = 0) break; mi = ti.wage + ti.time * 30; infile.close(); int count = i; Teacher teacher;