课程设计任务书
题目:教师信息管理系统
目 录
一、需求分析 .................................................. 错误!未定义书签。 二、程序流程图 .............................................. 错误!未定义书签。 三、核心技术的实现说明及相应程序段 ...... 错误!未定义书签。 四、课设总结 .................................................. 错误!未定义书签。 五、参考文献 .................................................. 错误!未定义书签。 六、源程序 ...................................................... 错误!未定义书签。
1
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为七个模块,每一个模块对应一个函数。在这些函数当中,添加教师数据函数,显示教师数据函数,查询教师信息函数的实现严格按照题目的要求。读取文件函数和保存信息函数对其它函数的实现起辅助作用,主函数及菜单函数控制程序的整体运行。
1. 添加教师数据函数 主要实现程序最初运行时教师数据的录入以及其后的运行中教师数据的追加功能; 2. 显示函数 实现的是显示目前所有的有效教师的记录信息。
3. 教师信息查询函数 允许按照教师工资或教师学历对教师的各项信息进行查询;
除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
每一位教师的记录都包含教师号、姓名,以及性别、
I
年龄、学历、工资和电话号码,在程序当中,将教师记录类型定义为结构体类型,添加以及追加的教师信息直接写入E盘的teachers.txt文件中,其它函数每次对学生记录的访问,其数据来源都是teachers.txt文件,这样做不但可以保证教师数据的一致性,而且可以对教师数据进行永久保存,保证每次运行程序都可以采用原来的数据。
二、程序流程图
1. 程序总体结构图 当1 n=1 真 添加教师 n=2 信息函数 真 add() 显示教师 n=3 信息函数 真 show() 查询教师信息函数 query() 假 假 假 n=4 真 假 查询函数 退出 query1() 图1程序总体结构图 2. 具体功能框图
(1)添加教师数据函数add
II
真 以读方式打开teachers.txt文件成功? 假 循环变量i=0 当文件未结束时 输出文件打开失败 读取教师信息到tea[i]中 i++ 返回 关闭文件 返回教师人数i ++ 图2 添加教师数据函数
(2)读取教师数据函数reads
真 以读方式打开teachers.txt文件成功? 假 循环变量i=0 当文件未结束时 输出文件打开失败 读取教师信息到tea[i]中 i++ 返回 关闭文件 返回教师人数i
图表 1
III
图3读取学生数据
三、核心技术的实现说明及相应程序段
本程序主要由七个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其它函数来实现要求的所有功能。在这些函数当中,添加教师数据函数、显示数据函数和查询函数是程序中较为核心的部分,下面分别进行说明。 1. 添加数据函数
添加数据分为两种情况,其一是在教师文件(teachers.txt)不存在的情况下,首先由程序创建一个新文件,并将录入的教师信息写入该文件当中;其二是在教师文件(teachers.txt)已经存在的情况下,此时文
IV
件以追加的方式打开,这样才可以保证以前已经存在的数据不丢失。具体的程序段如下:
if((fp=fopen(\"e:\\\eachers.txt\ /*如果文件已经存在,可以追加教师信息*/ {
if((fp=fopen(\"e:\\\\ teachers.txt\// 文件不存在时,创建新文件,输入教师信息 { printf(\"文件打开失败!\\n\"); return; } }
printf(\"请输入要添加的教师数量,按回车键确认:\"); scanf(\"%d\ for(i=1;i<=n;i++) { printf(\"\\n请输入第%d个教师的教师号、姓名,用空格分开,并按回车键确认:\\n\
scanf(\"%s%s\
printf(\"\\n请输入第%d个教师的性别、年龄、学历、工资、电话,用空格分开,并按回车键确认:\\n\
scanf(\"%s%d%s%f%s\phone);
fprintf(fp,\"%s %s %s %d %s %f %s\\n\ex,tea.age,tea.level,tea.pay,tea.phone); }
2. 显示数据函数
该函数的核心内容是显示算法。该函数执行时,首
V
先调用reads函数将文件中的教师信息读入数组当中。对教师信息的具体显示算法是在结构体数组中实现的。具体程序段如下:
n=reads(tea);
printf(\"*********************所有的教师信息如下**********************\\n\\n\");
printf(\" 序号 教师号 姓名 性别 年龄 学历 工资 电话 \\n\");
printf(\"*************************************************************\\n\");
for(i=0;i getch(); 3. 信息查询函数 查询可分为按教师工资查询和按教师学历查询,由于问题规定是按照工资或者学历都能分别查询,因此应建立两个查询函数。首先应分别定义一个字符和字符串数组,以分别赋予查询条件,然后分别读取教师信息数据,这部分程序仍然调用了reads函数,整个过程在结构体数组tea中实现,如果某教师的信息能够与输入的查询条件相匹配,那么程序会调出该教师的所有信息并 VI 输出。如果不能与查询条件匹配,那么则输出“没有找到教师信息”。 具体的程序段如下:(按教师工资查询)float pay1; int i,n; n=reads(tea); printf(\"\\n请输入待查询的教师工资,按回车键确认:\\n\"); scanf(\"%f\ for(i=0;i printf(\"\\n%3d%12s%11s%11s%3d%11s%11.2f%11s\\n\i].num,tea[i].name,tea[i].sex,tea[i].age,tea[i].level,tea[i].pay,tea[i].phone); else printf(\"没有找到教师信息 \\n\"); 具体的程序段如下:(按教师工资查询) har level[N]; VII int i,n; n=reads(tea); printf(\"\\n请输入待查询的教师学历,按回车键确认:\\n\"); scanf(\"%s\ for(i=0;i 四、课设总结 经过了一周的课程设计,我感到编程并不是那么困难和枯燥,我对C语言编程又重新有了浓厚的兴趣。我经过这次编程,对程序的结构有了更加深科的认识,回忆起并熟悉掌握了C语言的一些基础而重要的知识,对程序的调试能力也有了进一步的提高。本次我的完成了程序的编写与调试,所编写的程序能够顺利运行,并能够解决一些实际问题,我感到非常高兴和欣慰,对自己也充满了信心。 VIII 五、参考文献 1 谭浩强.C程序设计.北京:清华大学出版社,2005 2 刘成等.C语言程序设计实验指导与习题集.北京:中国铁道出版社,2006 六、源程序 #include char level[N]; float pay; char phone[N]; }; void menu(); int reads(struct teachers tea[N]); void save(struct teachers tea[N],int n); void add(); void show(); void query(); void query1(); void main() { int n; IX while(1) { menu(); printf(\"\\n 请输入您要选择的操作序号,按回车键确认:\"); scanf(\"%d\ switch(n) { case 1: add();break; case 2: show();break; case 3: query();break; case 4: query1();break; case 5: exit(0); default: printf(\"输入错误,请输入列表中存在的序号!\\n \"); } } } void menu() { printf(\" ************************* 班级成绩管理系统************************ \"); printf(\"\\n 1 添加教师数据\"); printf(\"\\n 2 显示教师数据\"); printf(\"\\n 3 按教师工资查询教师数据\"); printf(\"\\n 4 按教师学历查询教师数据\"); printf(\"\\n 5 退出\"); } int reads(struct teachers tea[N]) // 读取教师文件中的内容 { FILE *fp; int i=0; if((fp=fopen(\"e:\\\eachers.txt\ { printf(\"文件打开失败!\\n\"); return 0; X } else { for(i=0;!feof(fp);i++) fscanf(fp,\"%s %s %s %d %s %f %s\\n\.age,tea[i].level,&tea[i].pay,tea[i].phone); } fclose(fp); return i; } void add()/*添加教师信息*/ { FILE *fp; int n,i; struct teachers tea; if((fp=fopen(\"e:\\\eachers.txt\ //如果文件已经存在,可以追加教师信息 { if((fp=fopen(\"e:\\\eachers.txt\// 文件不存在时,创建新文件,输入教师信息 { printf(\"文件打开失败!\\n\"); return; } } printf(\"请输入要添加的教师的数量,按回车键确认:\"); scanf(\"%d\ for(i=0;i printf(\"\\n请输入第%d个教师的性别、年龄、学历、工资、电话,用空格分开,并按回车键确认:\\n\ XI scanf(\"%s%d%s%f%s\ fprintf(fp,\"%s %s %s %d %s %f %s\\n\el,tea.pay,tea.phone); } fclose(fp); } void show()/*显示教师信息*/ { struct teachers tea[N]; int i,n; n=reads(tea); printf(\"*********************所有的教师信息如下**********************\\n\\n\"); printf(\" 序号 教师号 姓名 性别 年龄 学历 工资 电话 \\n\"); printf(\"*************************************************************\\n\"); for(i=0;i void query() // 按教师工资对教师信息查询 { struct teachers tea[N]; float pay1; int i,n; n=reads(tea); printf(\"\\n请输入待查询的教师工资,按回车键确认:\\n\"); scanf(\"%f\ for(i=0;i printf(\"\\n%3d%12s%11s%11s%3d%11s%11.2f%11s\\n\me,tea[i].sex,tea[i].age,tea[i].level,tea[i].pay,tea[i].phone); else printf(\"没有找到教师信息 \\n\"); } void query1() // 按教师学历对教师信息查询 { struct teachers tea[N]; char level[N]; int i,n; n=reads(tea); printf(\"\\n请输入待查询的教师学历,按回车键确认:\\n\"); scanf(\"%s\ for(i=0;i XIII 1 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务