1、 . 目 录 目 录 1 一、设计目的1 二. 设计容2 三.概要设计3 1.功能模块图3 2.各个模块详细的功能描述。4 四.详细设计5 1、输入记录模块5 2、插入记录模块6 3、删除记录模块〔具体流程图如以下图〕6 4、函数功能描述7 五. 测试数据及
2、运行结果 8 1.系统主界面8 2.输入界面9 3.输出教师信息界面11 4. 插入教师信息界面12 六.调试情况,设计技巧及体会 12 附录 源代码 13 一、设计目的 本程序旨在训练根本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和构造数组的各种根本操作。本程序涉及构造体、数组、指针、文件等方面的知识。通过本程序的训练,使读者能对C语言的文件操作有一个更深刻的了解,掌握利用数组存储构造实现教师工资管理系统,为进一步开发出高质量信息管理系统打下坚实的根底。 〔1〕稳固和加强?C++语言程序设计?课程的理论知识。 〔2〕掌握C++语言的根本概念、语法、语义
3、和数据类型的使用特点。 〔3〕掌握C++语言程序设计的方法及编程技巧,能正确使用C++语言编写程序。 〔4〕进一步理解和运用构造化程设计的思想和方法;学会利用流程图表示算法。 〔5〕掌握调试程序的根本方法及上机操作方法。 〔6〕掌握书写程设计开发文档的能力,学会撰写课程设计总结报告。课程设计的思想和方法还可以作为毕业论文时的参考资料。 〔7〕通过查阅手册和文献资料,培养自己独立分析问题和解决问题的能力。为自己做毕业设计打好根底。 〔8〕初步掌握开发一个小型实用系统的根本方法:结合实际应用的要求,使课程设计既覆盖知识点,又接近工程实际需要。通过激发学习兴趣,调动自己主动学习的积极性,
4、并根据实际编程要求,训练自己实际分析问题的能力及编程能力,并养成良好的编程习惯。 〔9〕培养自己的创新能力和创新思维。可以根据指导书和相关文献上的参考算法,自己设计出相应的应用程序。 〔10〕培养自己良好的程序设计风格。在实际编程中,为了提高编程质量,对空行、空格和注释均有要求。自己在课程设计书写代码时,应该严格按要求处理,以便建立良好的程序设计风格。 二. 设计容 每个教师的信息为:教师号、XX、性别、单位名称、家庭住址、联系、根本工资、津贴、生活补贴、应发工资、费、水电费、房租、所得税、卫生费、公积金、合计扣款、实发工资。注:应发工资=根本工资+津贴+生活补贴;合计
5、扣款=费+水电费+房租+所得税+卫生费+公积金;实发工资=应发工资 - 合计扣款。 1、教师信息处理 (1)输入教师信息 (2) 插入〔修改〕教师信息: (3) 删除教师信息: (4) 浏览教师信息: 提示:具体功能及操作参考题1。 2、教师数据处理 (1) 按教师号录入教师根本工资、津贴、生活补贴、费、水电费、房租、所得税、卫生费、公积金等根本数据。 (2) 教师实发工资、应发工资、合计扣款计算。 提示:计算规那么如题目。 (3) 教师数据管理 提示:输入教师号,读出并显示该教师信息,输入新数据,将改后信息写入文件 (4) 教师数据查询:
6、提示:输入教师号或其他信息,即读出所有数据信息,并显示出来。 (5) 教师综合信息输出 提示:输出教师信息到屏幕。 三.概要设计 1.功能模块图 主界面 选择操作 1——输入教师信息 2——插入教师信息 3——修改教师信息 教师工资管理系统 4——删除教师信息 5——浏览教师信息 6——系统信息 结 束 7——退出系统 图1教师工资系统功能模块图 2.各个模块详细的功能描述。 (1)输入教师信息模块 在主菜单中运用构造体teache
7、r,输入教师信息,首先建立链表,将用户输入的学生信息存储到链表中,输入完成后提示用户时候继续输入,如果用户输入“Y〞或“y〞,那么再次调用,实现继续输入学生信息的操作。如果用户输入“N〞或“n〞,那么返回主菜单界面。 (2)插入教师信息模块 在主菜单中调用teacher *insert(),然后按照提示依次输入教师信息,然后再调用void print〔〕函数讲所有的教师信息记录打印出来。然后再返回主菜单界面。 (3)修改教师信息模块 在主菜单中调用void edit()函数。按教师号查找教师信息,如果找到教师信息,调用void edit()函数提示用户输入新的教师信息,完成修改的操
8、作。操作完毕后提示用户修改成功。然后返回主菜单界面。 (4)删除教师信息模块 在主菜单中调用del()函数,以删除教师信息,首先按学号查询教师信息,如果没有找到教师信息,给出提示信息。如果查找到该教师信息,给出改教师的全部信息,如果查找到,那么删除该教师信息,给出删除成功的提示信息。然后返回主菜单界面。 (5)浏览教师信息模块 在主菜单中调用void print()函数来显示教师信息,先判断链表是否为空。如果链表不为空时,逐条显示链表中教师的信息,显示调用teacher *next()函数按照教师号的大小来显示教师的信息。然后返回主菜单界面。 (6)系统信息模块 在主菜单
9、中输入6,可知系统信息、版本。 (7)退出系统模块 将链表中的数据全部释放掉,防止存泄露。退出系统。 四.详细设计 1、输入记录模块 输入教师信息的流程图如以下图。首先要开辟一个新节点,并使p1,p2指向它。读入一个教师数据给p1所指的节点。此时要使head=NULL,n=0,并且p1->num!=0。 开辟一个新节点,并使P1,p2指向它 读入一个教师数据给P1所指的结点 Head=NULL && n=0 <当读入的p1->num!=o> N=n+1
10、 N=1 真 假 Head=p1 p2->next=p1 把p1所指的结点 把p1所指的结点 作为第一结点 连接到表尾 P2=p1 再开辟一个新结点,使p1指向它 读入一个教师数据给p1所指结点 具体流程图如图: 2、插入记录模块 插入记录模块具体流程图如以下图所示: P1=head , p0=teacher 原来的
11、链表是空表 是 否 当p0->num>p1->num以及p1所指的不是表尾结点 P2指向p1位置 P1向后移一个结点 P0->num<=p1->num 将p0所 真
12、 假 指的结 p1指向头结点 点作为 是 否 p1->next=p0 唯一的 head=p0 p2->next=p0 结点 p0->next=p1 p0->next=p1 p0->next=NULL f 链表是一个空链表 真 假
13、 P1=head 输 当num!=p1->num以及p1所指的结点不是表尾结点 P2=p1 出 P1=p1->next P1是要删除的结点 是 否 空 p1所指的头结点
14、 是 否 输出找不到 表 head= p2->next= 教师信息 P1->next p1->next 3、删除记录模块〔具体流程图如以下图〕 4、函数功能描述 〔1〕 保存数据函数save() 函数原型:void save() 功能描述:将链表teacher中的N个数据写入到磁盘文件teacher_list中,如果保存成功,那么给出提示保存成功,否那么返回“cannot o
15、fen 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=nop->num!=no p=p->next 打印教师信息
16、 图5.2 〔3〕 修改教师信息函数edit() 函数原型:void edit(struct teacher *p) 功能描述:首先让用户输入希望修改的教师的教师号a, 然后在链表中一条一条查找看p->num是否等于a,如果找到,那么让用户再次输入教师的具体信息,输入完毕跳出,转向主菜单界面。如果没有找到,那么令p=p->next。直到查询完所有的教师记录。 函数流程图如图5.3 所示 输入想修改教师信息的教师号a p->num==a Yes no p=p->next 再次输
17、入教师信息 五. 测试数据及运行结果 1.系统主界面 用户刚进入系统时,如图1、2所示。 主菜单界面: 图1 图 2 2.输入界面 用户在主菜单界面的时候输入1,显示如图 图2 依次给出需要输入的信息的,教师号、XX、性别、单位名称、家庭住址、联系、根本工资、津贴、生活补贴、费、水电费、房租、所得税、卫生费、公积金等。 当公积金输入完成,系统将给出提示是否想继续输入教师信息,显示如图 如果输入Y或
18、者y,那么继续输入教师信息;如果输入N或者n,那么返回到主菜单界面。显示如以下图: 3.输出教师信息界面 如果已经输入教师信息,再在主菜单项选择择4——浏览教师信息,结果如图: 4. 插入教师信息界面 在主菜单中进入2——插入教师信息,然后依次插入教师的所有信息,最后打印链表里的记录,如图: 六.调试情况,设计技巧及体会 持续一个学期的课程设计给了我太多的感触,开场从题目上看,感觉题目很大,设计量很大,也很复杂,感觉不是简单的就能解决的。这样只用重新拾起书继续来看,获得新的知识和稳固以前的C方面的知识。提升自己的能力。 整个程序的设计是分模块实现具体的功能,每个
19、模块分别由不同的函数构成。链表的建立实现输入信息的功能,相比较于数组更加方便,更能够节省存空间等。通过使用文件fread和fwrite函数方便的将数据信息写入文件以及将文件中的信息载入显示段。
通过这个学期的课程设计的练习与设计我学会了很多,也更加熟悉C语言程序设计,从中得到了很多乐趣,很快乐,感觉C语言的世界里面奇妙无比。虽然在途中也遇到很多的苦难,但是还是通过问同学和学长解决了。最后看到自己设计的程序能够运行起来特别的开心。
这次的程序设计很有意义,也很锻炼人的能力,特别是C语言方面的能力,为自己在C++语言方面打下根底。
附录 源代码
#include
20、include 21、
cin>>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;
};//课时
void Teac 22、her::display1()
{
cout << "请输入";
Person::display();
cout << "请输入教师的课时〔小时〕: ";
cin >> time;
while(time<=0)
{
cout<<"请重新输入课时大于0的数:"< 23、endl;
cout << "\t\t 1:教师" << endl;
cout << "\t\t 2:领导" << endl;
cout << "\t\t 3:教师兼职领导" << endl;
cout << "\t\t 4:退出录入" << endl;
cout << "请选择: ";
}
void jiaoshiluru()//教师录入
{
ofstream outfile("教师.txt", ios::app);
if (!outfile) {
cerr << "open error!" < 24、< endl;
exit(0);
}
int b;
cout << "请选择你要录入教师的个数:";
cin >> b;
for (i = 0; i < b; i++) {
t[i].display1();
cout<<"是否保存信息(y(Y)/n(N))"< 25、].wage
<< " " << t[i].time << endl;
}
}
outfile.close();
}
void wenjianluru()//文件录入
{
int c;
for (i = 0;; i++)
{
show();
cin >> c;
if (c == 4)
{
cout << "退出录入成功。" << endl;
system("cls");
b 26、reak;
} else
switch (c)
{
case 1:
jiaoshiluru();
break;
case 2:
Leaderluru();
break;
case 3:
jianzhiluru();
break;
d 27、efault:
{
cout << "上一次输入错误。" << endl;
}
break;
}
}
}
void jiaoshishuchu()//教师输出显示
{
ifstream infile("教师.txt", ios::in);
int m;
for (i = 0; i < 100; i++)
{ t[i].num=0;
infile >> t[i].num >> t[i].n 28、ame >> t[i].wage >> t[i].time;
if (t[i].num == 0)
break;
int jintie1;
jintie1=t[i].time*30;
m = t[i].wage + jintie1;
cout << "\t教师: " < 29、tie1< 30、ge >> x[i].butie;
if (x[i].num == 0)
break;
m = x[i].wage + x[i].butie;
cout << "\t领导:" < 31、].butie< 32、< endl;
cout << "\t\t 1:教师查询" << endl;
cout << "\t\t 4:退出查询" << endl;
cout << " 请选择一个操作:";
}
void jiaoshichaxun()
{
ifstream infile("教师.txt", ios::in);
string nam;
int num;
int m, n,x;
cout<<"\t\t1.按教师的XX查找\n\t\t2.按教师的工号查找";
cout<<"\n\t\t 请选择";
33、cin>>x;
switch(x)
{
case 1:{cout<<"\t\t请输入要查找的教师的XX:";
cin>>nam;
for (i = 0, n = 0; i < 100; i++) {
infile >> t[i].num >> t[i].name >> t[i].wage >> t[i].time;
if (t[i].num == 0)
break;
if (t[i].name==nam) {
n++;
m = 34、t[i].wage + (t[i].time - 24) * 30;
cout<<"\t\t工号 XX 工资"< 35、break;
case 2:
{
cout<<"\t\t请输入要查找的教师的工号:";
cin>>num;
for (i = 0, n = 0; i < 100; i++) {
infile >> t[i].num >> t[i].name >> t[i].wage >> t[i].time;
if (t[i].num == 0)
break;
if (t[i].num==num) {
n++;
m = t[i].wage + (t 36、[i].time - 24) * 30;
cout<<"\t\t工号 XX 工资"< 37、t:{cout<<"操作选择错误!"< 38、 {
case 1:
jiaoshichaxun();
break;
case 2:
leaderxhaxun();
break;
case 3:
jianzhichaxun();
break;
default: {
cout << "上一次输入错误 39、" << endl;
}
break;
}
}
}
void show5()
{
cout << "\t请输入你要修改的对象:" << endl;
cout << "\t\t 1:教师修改" << endl;
cout << "\t\t 2:教师兼职领导修改" << endl;
cout << "\t\t 3:退出修改" << endl;
cout << " 请选择一个操作:";
}
void jiaoshixiugai()//教师修改
40、
{
ifstream infile("教师.txt", ios::in);
string nam;
int n, n1, m1 = 0;
cout << "请输入你要修改教师的名字: ";
cin >> nam;
cout << "请输入你要修改的课时:";
cin >> n;
for (i = 0; i < 100; i++) {
infile >> t[i].num >> t[i].name >> t[i].wage >> t[i].time;
if (t[i].num = 41、 0)
break;
m1++;
if (t[i].name ==nam) {
n1 = t[i].time;
t[i].time = n;
n = n1;
}
}
infile.close();
ofstream outfile("教师.txt", ios::out);
for (i = 0; i < m1; i++) {
outfile << t[i].num << " 42、 " << t[i].name << " " << t[i].wage
<< " " << t[i].time << endl;
}
outfile.close();
}
void xiugai()//修改
{
int c;
for (i = 0;; i++) {
show5();
cin >> c;
if (c == 3) {
cout << "\t\t\t退出修改成功。" << endl;
system( 43、"cls");
break;
} else
switch (c) {
case 1:
jiaoshixiugai();
break;
case 2:
janzhi2xiugai();
break;
default: {
cout << "上一次输入错误。" << endl; 44、
}
break;
}
}
}
void show6()
{
cout << "\t请选择如下操作:" << endl;
cout << "\t1:教师删除" << endl;
cout << "\t2:领导删除" << endl;
cout << "\t3:教师兼职领导删除" << endl;
cout << "\t4:退出删除" << endl;
cout << "请选择你的一个操作: ";
}
void jiaoshide 45、l()//教师删除
{
ifstream infile("教师.txt", ios::in);
string nam;
int num;
int n,x;
cout<<"\t\t1.按教师的XX删除\n\t\t2.按教师的工号删除";
cout<<"\n\t\t 请选择";
cin>>x;
switch(x)
{
case 1:{cout<<"\t\t请输入要删除的教师的XX:";
cin>>nam;
for (i = 0, n = 0; i < 100; i++) {
infile 46、>> t[i].num >> t[i].name >> t[i].wage >> t[i].time;
if (t[i].num == 0)
break;
if (t[i].name==nam) {
n++;
t[i].num=0;break;
} }
if (n ==0)
cout << "没有你要删除的教师。" << endl;
else
cout<<"删除成功!"< 47、2:
{
cout<<"\t\t请输入要删除的教师的工号:";
cin>>num;
for (i = 0, n = 0; i < 100; i++) {
infile >> t[i].num >> t[i].name >> t[i].wage >> t[i].time;
if (t[i].num == 0)
break;
if (t[i].num==num) {
n++;
t[i].num=0;break;
}
48、 }
if (n ==0)
cout << "没有你要删除的教师。" << endl;
else
cout<<"删除成功"< 49、 outfile << t[i].num << " " << t[i].name << " " << t[i].wage
<< " " << t[i].time << endl;
}
outfile.close();
}
void show_sort()
{
cout << "请选择如下操作:" << endl;
cout << "\t\t 1:教师排序" << endl;
cout << "\t\t 2:教师兼职领导排序" << endl;
cout << 50、 "\t\t 3:退出排序" << endl;
cout << "请选择你的一个操作: ";
}
void jiaoshi_sort() //教师排序
{
ifstream infile("教师.txt", ios::in);
int m[100];
for (i = 0; i < 100; i++) {
infile >> t[i].num >> t[i].name >> t[i].wage >> t[i].time;
if (t[i].num == 0)
break;






