C++课设教师工资管理系统.docx
一、设计目的2二 .设计内容3三 .概要设计41 .功能模块图42 .各个模块详细的功能描述。43 .详细设计51、输入记录模块52、插入记录模块63、删除记录模块(具体流程图如图所示)74、函数功能描述74 .测试数据及运行结果91 .系统主界面92 .输入界面103 .输出教师信息界面1112134 .插入教师信息界面12六.调试情况,设计技巧及体会 附录源代码2 .输入界面用户在主菜单界面的时候输入1,显示如图c、*F:jiaoshi03Debugjiaoshi03. exe>>>>>欢迎使用教师工资管理系统Beta1.2<<<<<12 3 4 5 6 7师师师师师息统 系入入改出 汴、退信信信信信息自心息自心自心请掇好想要的操作:1 请输入教师信息:图2依次给出需要输入的信息的,教师号、姓名、性别、单位名称、家庭住址、联系 电话、基本工资、津贴、生活补贴、电话费、水电费、房租、所得税、卫生费、 公积金等。当公积金输入完成,系统将给出提示是否想继续输入教师信息,显示如图c *F:jiaoshi03Debugjiaoshi03. exe.修改教师信珊院教师信 阑应教师信 .系统信息.退出系统请题迩相震的操作:1 请输入教师信息:j g 6 0c n 6 0 0n .1 6 0 0h p 6 2 5 I1 0 : 00 0 巾 0 2 V-:0iuan薨话资00贴:3:200得:3:2l号:1:n名住电工费:1所费金?工名别位庭奥贴簿电租人生积个饕性®量电壹个卫公一1AJAJA1AJAJAJAJA1AJAJA1AJAJA1A下输输输输输输输输输输输输输输一义请请请请请请请请请请请请请请请输00 ) 2 n - 4- Q0 2回如果输入Y或者y,则继续输入教师信息;如果输入N或者n,则返回到主菜单 界面。显示如下图:3 .输出教师信息界面如果已经输入教师信息,再在主菜单选择4浏览教师信息,结果如图:»»»»»>浏览教师信息<<<<<<<<<<<3 .返回上缓菜单MMXMMXMMXXMMXMMMMMMMMMMMMMMXMMMMMXXMXXMMXMMMMXMMMMMMXMM教工号1 刘1 liu电话费200.0300.0基本工资2000.02000.0请输入你想要的操西1-前有保存的信息如下:单位名祢河南城灌学院姓名nan水电费300.0200.0津贴1000.01000.0hnc j房租 个人所得税1500.0600.01000.0200.0生活补贴200.0500.0塞庭住址 率顶山期城区 pingdingshan卫生费 200.0 300.0 应发工资 3200.0 3500.0公积金300.0222.0实发工资100.01278.0联系电话666666666666合计扣款3100.02222.0按下任意键返回主菜单.4 .插入教师信息界面.在主菜单中进入2插入教师信息,然后依次插入教师的所有信息,最后打印 链表里的记录,如图:息自心自心信信信W师心统 教教裁信系 退2自心 .信 作师 的的 要入 想插 你要 I1AI1A 请请02j C n honan薨话资00贴:1:100号=g:n名住电工费:1所费金毕 工名别位庭奥贴簿电租人生松兀 饕性®盘电壹个卫公入 1 AJAJA'lAJAJAJAJA'lAJAJAlAJAJAlA 请请请清请莆请请请莆请1请请1数六.调试情况,设计技巧及体会持续一个学期的课程设计给了我太多的感触,开始从题目上看,感觉题目很 大,设计量很大,也很复杂,感觉不是简单的就能解决的。这样只用重新拾起书 继续来看,获得新的知识和巩固以前的C方面的知识。提升自己的能力。整个程序的设计是分模块实现具体的功能,每个模块分别由不同的函数构 成。链表的建立实现输入信息的功能,相比较于数组更加方便,更能够节省内存 空间等。通过使用文件fread和fwrite函数方便的将数据信息写入文件以及将文 件中的信息载入显示段。通过这个学期的课程设计的练习与设计我学会了很多,也更加熟悉C语言程 序设计,从中得到了很多乐趣,很快乐,感觉C语言的世界里面奇妙无比。虽然 在途中也遇到很多的苦难,但是还是通过问同学和学位解决了。最后看到自己设 计的程序能够运行起来特别的开心。这次的程序设计很有意义,也很锻炼人的能力,特别是C语言方面的能力, 为自己在C+语言方面打下基础。附录源代码#include<iostream>#include<fstream>#include<stdlib. h>#include<string>#include<iomanip>using namespace std;int i;class Person public:void display ()(cout <姓名:;cin >> name;cout << 工号:;cin >> num;while(num<=0)(cout。请重新输入工号大于0的数:endl; cin>>num;)string name;名字int num;; 工号class Teacher: public Person教师(public:Teacher () int s=1000;wage = s;butiel=0;void displayl();int wage;基本工资int time;int butiel;int jinticl;; 课时void Teacher:displayl()cout << "请输入”;Person:display ();cout « 请输入教师的课时(小时):;cin >> time;while(time<=0)(cout*请重新输入课时大于0的数:Gendl; cin>>time;); 补贴Teacher t 100;Leader x100;Jianzhi j100;void show()(cout << t请输入你要录入的对象:* endl;cout << tt 1:教师 << endl;cout << z,tt 2:领导* endl;cout << z/tt 3:教师兼职领导 endl;cout << tt 4:退出录入 << endl;cout (请选择:;)void jiaoshiluru()教师录入(of stream outf ile (教师. txt, ios: :app);if (!outfile) cerr << "open error!z,<< endl;exit (0);)int b;cout « 请选择你要录入教师的个数:;cin >> b;for (i = 0; i < b; i+) t i. displayl ();cout。是否保存信息(y (Y)/n (N) *endl;char c;cin>>c;if (c=,Y' | |c二二'y )(outfile « ti. num << << ti, name « " << ti. wage<< « ti,time << endl;)outfile. close();)void wenjianluru()文件录入(int c;for (i = 0; i+)(show ();cin >> c;if (c = 4)(cout << 退出录入成功。 « endl;system (cls);break; elseswitch (c)(jiaoshiluruO ;break;Leaderluru ();break;jianzhiluru();break;default:(cout <上一次输入错误。endl;)break;)void jiaoshishuchu()教师输出显示(ifstream infile(教师. txt,ios: in);int m;for (i = 0; i < 100; i+) ti. num=O;infile >> ti. num >> ti. name >> ti. wage » ti. time;if num 二二 0) break;int jintiel;jintiel=ti. time*30;m = ti.wage + jintiel;cout << t 教师: <<setw(8) << t i. num <<setfill C 9) «setw(10)« t i. name <<setfill (J ')«setw(10) «ti. wagesetfill ('') <<setw(14)«jintiel<<setfillJ )«setw(12)«ti. butiel«setfill (J * )«setw(10)« m<< endl; infile, close();)void leadershuchu()领导输出 (ifstream infile(领导.txt”, ios: in);int m;for (i = 0; i < 100; i+)xi.num =0;infile >> xi. num >> xiL name >> xi. wage >> xi.butie;if (xi. num = 0) break;m = xi.wage + xi.butie;cout « t 领导: <<setfill (J J)<<setw(8)<<xi. num «setfill J) <<setw(10)<< xi. namesetfill (' ' )<<setw(10)<<xi. wage«setfill C )<<setw(14)<<xi, jintie<<setfill C ')«setw(12) <<xi. butie«setfill (* ') <<setw(10)<< m<< endl;)infile, close();)void shuchu()输出显示 (cout «/ztt 工号 名字 基本工资 课时津贴 补贴 总工资 « endl;jiaoshishuchuO ;leadershuchu();jianzhishuchuO ;void show3 ()cout << t请输入你要查询的对象:* endl;cout << tt 1:教师查询”<< endl;cout << tt 4:退出查询“« endl;cout << 请选择一个操作:;)void jiaoshichaxun() (if stream infile(教师.txt”, ios: in);string nam;int num;int m, n, x;cout«/zttl.按教师的姓名查找ntt2.按教师的工号查找;cout<<z,ntt 请选择;cin>>x;switch(x)(case 1: cout<tt请输入要查找的教师的姓名:;cin>>nam;for (i = 0, n = 0; i < 100; i+) infile >> ti. num >> ti. name >> ti. wage >> ti. time;if (ti.num 二二 0)break;if name=nam) n+;m = ti.wage + time - 24) * 30;号姓名工资 <<endl;cout << t教师: << z,«t i. num << ,z <<ti. name <<<<m<< endl;)if (n =0)cout « 没有你要查询的教师。 « endl;infile, close();break;case 2:(请输入要查找的教师的工号:;cin>>num;for (i = 0, n = 0; i < 100; i+) infile >> ti. num >> tiL name >> ti. wage >> ti. time;if num =二 0)break;if nuni=num) n+;m = ti. wage + time - 24) * 30;cout«tt工号姓名工资"endl;name <<cout«t教师:<< ,z«ti.num « «ti.«m« endl;)if (n =0)cout << "没有你要查询的教师。 << endl;infile, close();break;default: cout*操作选择错误!endl;break; )void wenjianchaxim()文件查询 (int c;for (i = 0; i+) show3 ();cin >> c;if (c = 4) cout << 退出查询成功。 << endl; system (cls); break; elseswitch (c) jiaoshichaxun (); break;case 1: leaderxhaxun(); break;jianzhichaxun(); break; default: cout <上一次输入错误。 « endl;break;void show5 ()cout << t请输入你要修改的对象:"« endl;cout << tt 1:教师修改 « endl;cout «,ztt 2:教师兼职领导修改 << endl;cout << tt 3:退出修改 << endl;cout <请选择一个操作:;)void jiaoshixiugai ()教师修改(ifstream infile(“教师. txt", ios: in);string nam;int n, nl, ml = 0;cout * 请输入你要修改教师的名字:;cin >> nam;cout << 请输入你要修改的课时:;cin » n;for (i = 0; i < 100; i+) infile >> ti. num >> ti. name >> ti. wage >> ti. time;if num =二 0)break;ml+;if name =nam) nl = ti.time;ti. time = n;n = nl;)infile, close();of stream outfile (“教师. txt”, ios: :out);for (i = 0; i < ml; i+) outfile « ti. num << << ti. name << << ti. wage<< << ti.time << endl;outfile. close();void xiugai()修改int c;for (i = 0; i+) 、设计目的本程序旨在训练基本编程能力,了解管理信息系统的开发流程,熟悉C语言 的文件和结构数组的各种基本操作。本程序涉及结构体、数组、指针、文件等方 面的知识。通过本程序的训练,使读者能对C语言的文件操作有一个更深刻的了 解,掌握利用数组存储结构实现教师工资管理系统,为进一步开发出高质量信息 管理系统打下坚实的基础。(1)巩固和加强C+语言程序设计课程的理论知识。(2)掌握C+语言的基本概念、语法、语义和数据类型的使用特点。(3)掌握C+语言程序设计的方法及编程技巧,能正确使用C+语言编写 程序。(4)进一步理解和运用结构化程设计的思想和方法;学会利用流程图表示 算法。(5)掌握调试程序的基本方法及上机操作方法。(6)掌握书写程设计开发文档的能力,学会撰写课程设计总结报告。课程 设计的思想和方法还可以作为毕业论文时的参考资料。(7)通过查阅手册和文献资料,培养自己独立分析问题和解决问题的能力。 为自己做毕业设计打好基础。(8)初步掌握开发一个小型实用系统的基本方法:结合实际应用的要求, 使课程设计既覆盖知识点,又接近工程实际需要。通过激发学习兴趣,调动 自己主动学习的积极性,并根据实际编程要求,训练自己实际分析问题的能 力及编程能力,并养成良好的编程习惯。(9)培养自己的创新能力和创新思维。可以根据指导书和相关文献上的参 考算法,自己设计出相应的应用程序。(10)培养自己良好的程序设计风格。在实际编程中,为了提高编程质量, 对空行、空格和注释均有要求。自己在课程设计书写代码时,应该严格按要求处 理,以便建立良好的程序设计风格。show5 ();cin >> c;if (c = 3) cout << "ttt退出修改成功。"<< endl;system (cls);break; elseswitch (c) jiaoshixiugai ();break;janzhi2xiugai();break;default: cout << 上一次输入错误。 << endl;)break;)void show6()(cout << t请选择如下操作: << endl;cout «,ztl:教师删除"<< endl;cout << t2:领导删除 « endl;cout « z,t3:教师兼职领导删除 « endl;cout << ,zt4:退出删除 << endl;cout <<请选择你的一个操作:;)void jiaoshidel ()教师删除(ifstream infile(“教师. txt”, ios: in);string nam;int num;int n, x;cout«ttL按教师的姓名删除ntt2.按教师的工号删除;cout«,zntt 请选择;cin>>x;switch(x)case l:cout«tt请输入要删除的教师的姓名:;cin>>nam;for (i = 0, n = 0; i < 100; i+) infile >> 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:(cout«tt请输入要删除的教师的工号:;cin>>num;for (i = 0, n = 0; i < 100; i+) infile >> ti. num » ti. name >> ti. wage » ti. time;ifnum = 0)break;ifnum=num) n+;ti. num=0;break;)if (n =0)cout « 没有你要删除的教师。 « endl;elsecout<< 删除成功 <<endl;infile, close();break;default: cout<<操作选择错误!,z«cndl; break;)infile, close();ofstream outfile("教师. txt”, ios: :out);for (i = 0; i < 100; i+) if (ti.num != 0)outfile « ti. num << << ti. name << " << tLi. wage« << ti.time « endl;outfile. close();)void show_sort() (cout <<请选择如下操作: << endl;cout << "tt 1:教师排序 << endl;cout «,ztt 2:教师兼职领导排序 << endl;cout << tt 3:退出排序 << endl; cout « 请选择你的一个操作:;)void jiaoshi_sort () 教师排序 (ifstream infile(教师. txt”, ios: in);int m100;for (i = 0; i < 100; i+) infile >> ti. num >> ti. name >> ti.wage >> ti. time; if num =二 0)break;mi = ti. wage + ti.time * 30; )infile, close();int count = i;Teacher teacher;int tmp;for (int x = 0; x < count - 1; +x)for (int y = x + 1; y < count; +y) if (mx < my) teacher = tx;tx = ty; ty = teacher;tmp = mx;mEx - my;my = tmp; )cout «z,tt工号 名字 总工资 “« endl;for (i = 0; i < count; +i)cout << t教师:,z «setfill (J )<<setw(6) << t i. num «setfill(, ) «setw(10)<< t i. name<<setf ill (, *) <<setw(10) « mi << endl;void sort ()(int c;for (i = 0; i+) show sort ();cin >> c;if (c = 3) (cout退出排序成功。 << endl;systemC'cls);break; elseswitch (c) jiaoshi_sort();break;jianzhi sort (); break;default:cout <上一次输入错误。 << endl;Breakvoid show?()couttttt高校工资管理系统 endl;coutcoutcoutcoutcoutcoutttttl:tttt2:tttt3:tttt4:tttt5:tttt6:cout职工信息添加 « endl;职工信息输出显示 << endl;职工信息修改 << endl;职工信息删除 << endl;职工信息查询 « endl;职工工资由高到低排序* endl; 退出 « endl;cout请选择你的一个操作:int main ()int c;for (i = 0; i+) show?();cin >> c;if (c = 7) cout << 退出成功。 << endl; break; else switch (c) case 1:wenjianluruO ; break; case 2:shuchu ();break;case 3:xiugai();break;case 4: del (); break;case 5: wenjianchaxun()break;case 6:sort ();break; default: cout <上一次输入错误。 << endl; )break;)return 0;二.设计内容每个教师的信息为:教师号、姓名、性别、单位名称、家庭住址、联系电话、 基本工资、津贴、生活补贴、应发工资、电话费、水电费、房租、所得税、卫生 费、公积金、合计扣款、实发工资。注:应发工资=基本工资+津贴+生活补贴; 合计扣款=电话费+水电费+房租+所得税+卫生费+公积金;实发工资=应发工资 合计扣款。1、教师信息处理(1)输入教师信息(2)插入(修改)教师信息:(3)删除教师信息:(4)浏览教师信息:提示:具体功能及操作参考题1。2、教师数据处理(1)按教师号录入教师基本工资、津贴、生活补贴、电话费、水电费、房租、所得税、 卫生费、公积金等基本数据。(2)教师实发工资、应发工资、合计扣款计算。提示:计算规则如题目。(3)教师数据管理提示:输入教师号,读出并显示该教师信息,输入新数据,将改后信息写入文件(4)教师数据查询:提示:输入教师号或其他信息,即读出所有数据信息,并显示出来。(5)教师综合信息输出提示:输出教师信息到屏幕。三.概要设计1 .功能模块图主界面选择操作1输入教师信息 2插入教师信息 3修改教师信息4删除教师信息5浏览教师信息教 师 X 资 管 理 系 统6系统信息7退出系统图1教师工资系统功能模块图2 .各个模块详细的功能描述。输入教师信息模块在主菜单中运用结构体teacher,输入教师信息,首先建立链表,将用户输 入的学生信息存储到链表中,输入完成后提示用户时候继续输入,如果用户输入 “Y”或"y”,则再次调用,实现继续输入学生信息的操作。如果用户输入“N” 或或”,则返回主菜单界面。插入教师信息模块在主菜单中调用teacher "insert(),然后按照提示依次输入教师信息,然 后再调用void print ()函数讲所有的教师信息记录打印出来。然后再返回主 菜单界面。(3)修改教师信息模块在主菜单中调用void edit。函数。按教师号查找教师信息,如果找到教师 信息,调用void edit。函数提示用户输入新的教师信息,完成修改的操作。操 作结束后提示用户修改成功。然后返回主菜单界面。删除教师信息模块在主菜单中调用del ()函数,以删除教师信息,首先按学号查询教师信息, 如果没有找到教师信息,给出提示信息。如果查找到该教师信息,给出改教师的 全部信息,如果查找到,则删除该教师信息,给出删除成功的提示信息。然后返 回主菜单界面。浏览教师信息模块在主菜单中调用void print。函数来显示教师信息,先判断链表是否为空。 如果链表不为空时,逐条显示链表中教师的信息,显示调用teacher *next ()函 数按照教师号的大小来显示教师的信息。然后返回主菜单界面。(6)系统信息模块在主菜单中输入6,可知系统信息、版本。(7)退出系统模块将链表中的数据全部释放掉,防止内存泄露。退出系统。四.详细设计1、输入记录模块输入教师信息的流程图如下图。首先要开辟一个新节点,并使Pl, P2指向它。读入一个教师数据给pl所指的节点。此时要使head二NULL, n=0,并且pl->num!二0。具体流程图如图:开辟一个新节点,并使Pl, p2指向它读入一个教师数据给P1所指的结点Head=NULL && n=O当读入的pb>num!=o>N=n+1Head=p 1p2->next=p 1把pl所指的结点把pl所指的结点作为第一结点连接到表尾P2=pl再开辟一个新结点,使pl指向它读入一个教师数据给pl所指结点2、插入记录模块插入记录模块具体流程图如下图所示:将pO所 指的结 点作为 唯一的 结点P2指向pl位置P1向后移一个结点P0->num<=p l->numpl->next=pOp2->next=p0 pO->next=plhead=pO pO->next=plpl指向头结曳上pO->next=NULLPl=head ,pO=teacher 原来的链表是空表 '当pO->num>pl->num以及pl所指的不是表尾结点4、函数功能描述(1)保存数据函数save。函数原型:void save()功能描述:将链表teacher中的N个数据写入到磁盘文件teacher_list中,如 果保存成功,则给出提示保存成功,否则返回“cannot ofen file”表示无法打 开文件,返回“file write error表示文件输入错误。(2)浏览教师信息函数query。函数原型:void query (struct teacher *p)功能描述:将链表teacher中的head指向p,然后让用户输入教师号no,依次在 链表中需找P,如果教师号不对,则指针往后面拨动一下,使p=p->next;知道 找到相对应的正确的教师号。然后打印出教师的基本信息。函数流程图如图5. 2所示图5.2(3)修改教师信息函数edit。函数原型:void edit (struct teacher *p)功能描述:首先让用户输入希望修改的教师的教师号a,然后在链表中一条一 条查找看p->num是否等于a,如果找到,则让用户再次输入教师的具体信息, 输入完毕跳出,转向主菜单界面。如果没有找到,则令p=p->next。直到查询完 所有的教师记录。函数流程图如图5. 3所示再次输入教师信息p=p->next五.测试数据及运行结果1.系统主界面用户刚进入系统时,如图1、2所示。主菜单界面:*F:jiaoshi03Debugjiaoshi03. exe>>>>>欢迎使用教师工资管理系统Beta1.2<<<<<12 3 4 5 6 7师师师师师息统 系入入改出 汴、退信信信信信息自心息自心自心请输入你想要的操作: