教师信息管理系统
本题目设计目的是训练学生的基本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和单链表的各种基本操作。本程序中涉及结构体、数组、文件等方面的知识。通过本程序的训练,使学生能对C语言的文件操作有一个更深刻的了解,掌握利用数组结构实现对教师信息管理的原理,为进一步开发出高质量的管理信息系统打下坚实的基础。
1、问题定义
创建一个教师信息管理系统。系统中包括教师的信息录用,每个教师的总工资,教师的性别,出生年月,教师津贴等。程序的运行效果如下图所示,选择任任意菜单后,实现相应功能。
图1.1 教师信息管理系统功能
2、系统设计
2.1 总体设计
采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。需要注意的是划分出来的模块应该相对独立但又相关,且容易理解。可以用模块化层次结构图(即模块图)来分析其任务的划分,一般从上到下进行,最上面一层是主模块,下面各层是其上一层模块的逐步细化描述。
本教师信息管理系统要求采用单链表实现,如图2.1所示,它由如下五大功能模块组成:
2.2 详细设计
2.2.1数据结构设计
struct data
{
int year;
int month;
int day;
};
struct teacher
{
char num[15];
char name[30];
struct data bir;
char sex;
float jbgz;
float jt;
}; 结构体struct teacher将用于存储教师的基本信息,它将作为单链表的数据域。
2.2.2 主控main()函数执行流程
程序总体结构图
2.2.3函数功能描述
函数原型:void input()
void input()此函数功能是输入教师信息。
struct data 函数原型:void struct data stringinput ()函数用于输入字符串,并进行字符串
整个成绩管理系统控制部分,其详细说明可参考图二。
完成在上述系统设计后,即可着手进行系统实现的工作,开始程序代码的编写。
3、系统实现
3.1 编码
3.1.1 部分实训原始代码
#include
#include
#include
#include
/*函数声明*/
void input(); // 此函数功能是输入教师信息
int menu();//此函数是一个菜单
//学号:1352100129
struct data
{
int year;
int month;
int day;
};
struct teacher
{
char num[15];
char name[30];
struct data bir;
char sex;
float jbgz;
float jt;
};
int menu()
{
int n;
printf("1. 实现教师信息的录入\n");
printf("2. 求每个教师的总工资,并输出\n");
printf("3. 按总工资从高到低排序,输出教师信息\n");
printf("4. 查找指定姓名的教师信息,若不存在,给出提示信息\n");
printf("5. 查找基本工资最高的教师信息\n");
printf("6. 修改指定职工号的职工信息\n");
printf("7. 程序结束\n");
printf("************************************************\n");
printf("请输入你要执行的操作:\n");
scanf("%d",&n);
while( n<1 || n>7)
{
printf("请重新输入\n");
scanf("%d",&n);
}
return n;
}
//实现教师信息录入
void input(struct teacher a[],int n)
{
int i;
printf("\n");
for(i=0;i { printf("请输入教师工作号:"); scanf("%s",a[i].num); printf("请输入教师姓名:"); scanf("%s",a[i].name); printf("请输入教师出生日期:"); scanf("%d%d%d",&a[i].bir.year,&a[i].bir.month,&a[i].bir.day); printf("请输入教师性别:"); getchar(); scanf("%c",&a[i].sex); printf("请输入教师基本工资:"); scanf("%f",&a[i].jbgz); printf("请输入教师津贴:"); scanf("%f",&a[i].jt); } } //实现教师信息输出 void output(struct teacher a[],int n) { int i; printf("工作号,姓名,出生日期,性别,基本工资,津贴,总工资:\n"); for(i=0;i printf("%s %s %d %d %d %c %f %f %f\n",a[i].num,a[i].name,a[i].bir.year,a[i].bir.month,a[i].bir .day,a[i].sex,a[i].jbgz,a[i].jt,a[i].jbgz+a[i].jt); } //按工资从高到低排序,输出教师信息 void sortbyzgz (struct teacher a[],int n) { int i,j,k; struct teacher temp; for(i=0;i { k=i; for(j=i+1;j if((a[j].jbgz+a[j].jt)>(a[i].jbgz+a[i].jt)) k=j; if(k!=i) { temp=a[i]; a[i]=a[k]; a[k]=temp; } } output(a,n); } //查找指定姓名的教师信息,若不存在,给出提示信息 void searchbyname(struct teacher a[],int n) { char name[20]; int flag=0; int i; printf("请输入要查找的教师姓名:\n"); getchar(); gets(name); for(i=0;i { if(strcmp(name,a[i].name)==0) { printf("工作号,姓名,出生日期,性别,基本工资,津贴,总工资:\n"); printf("%s%s%d%d%d%c%f %f %f\n",a[i].num,a[i].name,a[i].bir.year,a[i].bir.month,a[i].bir.day, a[i].sex,a[i].jbgz,a[i].jt,a[i].jbgz+a[i].jt); flag=1; } } if(flag==0) printf("查无此人!\n"); } //查找基本工资最高的教师信息 void searchbyjbgz(struct teacher a[],int n) { struct teacher temp; int i; temp=a[0]; for(i=1;i { if(a[i].jbgz>temp.jbgz) temp=a[i]; } printf("工作号,姓名,出生日期,性别,基本工资,津贴,总工资:\n"); printf("%s%s%d%d%d%c%f%f%f\n",temp.num,temp.name,temp.bir.year,temp.bir.month,temp.bir.day,temp.sex,temp.jbgz,temp.jt,temp.jbgz+temp.jt); } void main() { int num; struct teacher tea[3]; while(num=menu()) { switch(num) { case 1: input(tea,3); break; case 2: output(tea,3);break; case 3: sortbyzgz(tea,3);break; case 4: searchbyname(tea,3);break; case 5: searchbyjbgz(tea,3);break; case 6: repeat(tea,3);break; case 7: exit(0); } getch(); //按任意键继续 system("cls"); //清屏 } 3.2 测试与调试 3.2.1 程序测试 图3.1 输入教师的信息 2.在主菜单中选择2 图3.2 查找教师的基本信息 3.在主菜单中选择3 当用户输入3并按回车键后,即可进入记录查找界面。其查找记录过程如图3.3所示,可按工号或姓名进行查找。 图3.3 查找指定的教师信息 4.在主菜单中选择4 当用户输入4并按回车键后,即可进入记录修改界面。其修改记录过程如图3.4所示,查找指定姓名的教师信息,入部存在则退出。 5.在主菜单中选择5 当用户输入5并按回车键后,即可进入记录插入界面。其插入记录过程如图3.5所示,这里是查找教师最高的教师基本信息记录。 图3.5 查找工资最高的教师记录 6.在主菜单中选择6 当用户输入6并按回车键后,即可进入记录统计界面。其统计结果如图3.6所示,查找不到教职工本人信息。 图3.6 修改教师的的信息 7.在主菜单中选择7 当用户输入7并按回车键后,即可执行退出管理程序的操作,返回操作系统。其操作结果提示信息如图3.7所示。 图3.7 按任意键退出 4、系统维护 通过程序调试成功后,结果很快就完成了,这时可以交付软件供用户使用,但是在软件的使用过程中还会面临更加漫长的工作,即软件维护。一般维护的工作有:更改使用中发现的错误;为适应实际环境而对程序进行修改;为满足新的需求而对程序作必要的改进等等。所以我认为程序的编写与调试及其重要,必须要牢固掌握。 5、归纳总结 5.1 开发经验 用C语言编写具有以下功能的程序: 1 录入教师信息,并将信息保存在teachers.txt文件中。 2 教师信息的浏览功能(输出)。 3 教师信息的查询功能,应分别能够按照工资和学历查询。 4 教师信息包括教师号、姓名、性别、年龄、学历、工资、电话等(教师号不重复)。 5.2 实训中遇到的问题及解决方法 在这次的实训中,主要遇到的问题是编译环境的不同对程序也不同。本来我们的程序是不支持在VC++里面编译的,因此一直都处在编译失败,该函数未定义的错误中。后来经过自己反复的程序调试,终于找到了根源,就是把“clrscr()”改为“system("cls")”就可以了。 需要源程序、文档信息可在我的资源里下载,此文章只供参考。 需要完整的资料可在我的资源里下载,也可以加入我的纷传圈子,里面有资源压缩包的百度网盘下载地址及提取码。 纷传 点击用微信打开即可,过程有点繁琐请见谅