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






