沈 阳 航 院 设 计 用 纸
沈阳航空工业学院
课程设计任务书
学号: 200704061247 一、课程设计时间
2008~09第2学期第15周,共计1周,20学时。
系:机电工程学院 专业: 机械电子工程 班级:7406108
题目:毕业生就业统计系统
二、课程设计内容
用C语言编写软件完成以下任务:
1) 录入毕业生的信息(学号,姓名,班级,专业),并保存到一个磁盘
文件中;
2) 录入每个毕业生就业单位信息(单位名称、性质、地点),签约时间; 3) 统计毕业生去向(统计相同单位的学生、统计同一城市的信息、统计
同一性质的单位信息);
三、课程设计要求 程序质量:
贯彻结构化的程序设计思想。
用户界面友好,功能明确,操作方便。用户界面中的菜单至少应
包括录入毕业生信息、就业等项。
代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:
课程结束后,上交课程设计说明书和源程序。课程设计说明书的
内容参见提供的模板。
四、指导教师和学生签字
指导教师:李 飞 学生签名:李欣欣 五、成绩
六、教师评语
2
沈 阳 航 院 设 计 用 纸
目录
一、需求分析 ................................................ 1 二、程序流程图 ............................................ 3 三、核心技术的实现说明及相应程序段 .. 10 四、课设总结 .............................................. 15 五、参考文献 .............................................. 16 六、源程序 .................................................. 16
3
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为七个模块,其中每一个模块对应一个函数,它们的功能分别是:读取文件信息函数,录入学生信息函数,显示学生信息函数,查询函数(包括对学生工作单位、城市、单位性质的查询)。在这些函数的实现严格按照题目的要求,而前面的三个函数属于附加功能。 1、录入学生信息函数 主要实现程序最初运行时学生信息的录入以及其后的运行中学生信息的追加功能; 2、显示学生信息函数 主要实现对录入的学生信息进行显示方便下面的调用;
3、查询函数 实现的功能是按照要求对学生的信息记录进行查询、调用;
4、查询相同单位学生信息函数 按照题目的具体要求实现的是对相同单位学生的信息的调用、查询; 5、查询相同城市学生信息函数 按照题目的具体要求实现的是对相同城市学生的信息的调用、查询;
沈 阳 航 院 设 计 用 纸
6、查询相同性质单位信息函数 按照题目的具体要求实现的是对相同性质单位的信息的调用、查询;
7、退出函数 实现的是在程序的一次运行当中循环执行所有功能时根据需要终止程序的执行的功能。
每一个学生记录都包含学号、姓名、班级、专业,而每一个学生的单位信息包含单位名称、地点、性质还有签约时间,在程序当中,将学生记录类型定义为结构体类型,添加以及追加的学生信息直接写入D盘的student.dat文件中,其它函数每次对学生记录的访问,其数据来源都是student.dat文件,这样做不但可以保证学生数据的一致性,而且可以对学生数据进行永久保存,保证每次运行程序都可以采用原来的数据。
2
沈 阳 航 院 设 计 用 纸
二、程序流程图
1、 程序总体结构图
输入1 假 真 录入学生和单位信息 真 输入2 假 真 输入3 假 输入真 输入待查询单位信息 4 假 5 假 输入待查询城市信息 真 输入输入输入6 待查退出系统 询性质信息
3
沈 阳 航 院 设 计 用 纸
2、具体功能框图
(1)读取学生信息函数reads()
读写方式打开d盘student.txt 文件不成功? Y return *n 读出记录总数赋给形参 N 循环变量i=0 i<*n N 读出一条学生信息记录到形参数组元素 Y stu[i] i++ 关闭文件 结束
4
开始 沈 阳 航 院 设 计 用 纸
(2)录入学生信息和单位信息函数add
读写方式打开D盘studeng.txt文件不成功? 真 假 写方式打开文件不成功 输入追加学生数量n 从文件读出学生数量记录数量赋给k 输出文件输入学打开 失败 生数量 n 返回 文件位置指针重新回到开头 将n写入文件 学生记录总数 n+k写入文件 循环变量i=1 当i<=n时 输入信息并写入文件i++ 文件位置指针定位在结尾fseek 循环变量i=1 当i<=n时 输入学生信息和单位信息 并写入文件i++ 关闭文件
5
沈 阳 航 院 设 计 用 纸
(3)显示学生信息和单位信息、签约时间函数
定义i,n 从文件中读出学生信息、单位信息和签约时间信息 输出“ *****************所有学生信息如下*****************” 输出“序号 学号 姓名 班级 专业 单位 地点 性质 签约时间” i=0;i 沈 阳 航 院 设 计 用 纸 (4)调用相同单位的学生信息danwei 循环变量i=0 从文件中读取学生数据 输出“请输入待查询的单位名称,按回车确认” 当i<=n strcmp(danwei,stu[i].danwei)==0 假 真 输出学生学生信息 7 沈 阳 航 院 设 计 用 纸 (5)调用相同城市的学生信息chengshi 循环变量i=0 从文件中读取学生数据 输出“请输入待查询的城市名称,按回车确认” 当i<=n strcmp(chengshi,stu[i].chengshi)==0 假 真 输出学生学生信息 8 沈 阳 航 院 设 计 用 纸 (6)调用相同单位性质的学生信息xingzhi 循环变量i=0 从文件中读取学生数据 输出“请输入待查询的性质名称,按回车确认” 当i<=n strcmp(xingzhi,stu[i].xingzhi)==0 假 真 输出学生学生信息 9 沈 阳 航 院 设 计 用 纸 三、核心技术的实现说明及相应程序段 本程序主要由七个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其它函数来实现要求的所有功能。在这些函数当中,录入信息函数、显示信息、查询信息函数程序中较为核心的部分,下面分别进行说明。 1、录入信息函数 添加信息分为两种情况,其一是在学生文件(student.txt)不存在的情况下,首先由程序创建一个新文件,并将录入的学生信息写入该文件当中;其二是在学生文件(student.txt)已经存在的情况下,此时文件要以读写方式或追加的方式打开,这样才可以保证以前已经存在的数据不丢失。具体的程序段如下: void add()/*录入学生信息函数*/ {FILE *fp; int n,i; struct student stu; if((fp=fopen(\"d:\\\\student.txt\ { printf(\"请输入要添加的学生数量,按回车键确认:\"); scanf(\"%d\ fseek(fp,0L,2); for(i=1;i<=n;i++) { printf(\"\\n请输入第%d个学生的学号、姓名、班级、专业,用空格分开,并按回车键确认:\\n\ 10 沈 阳 航 院 设 计 用 纸 scanf(\"%s%s%s%s\ printf(\"\\n请输入第%d个学生的单位名称、地点、性质、签约时间,用空格分开,并按回车键确认:\\n\ scanf(\"%s%s%s%s\ fprintf(fp,\"\\n%s %s %s %s %s %s %s %su.pro,stu.danwei,stu.chengshi,stu.xingzhi,stu.shijian); } } else { if((fp=fopen(\"d:\\\\student.txt\ { printf(\"请输入要添加的学生数量,按回车键确认:\"); scanf(\"%d\ for(i=1;i<=n;i++) { printf(\"\\n请输入第%d个学生的学号、姓名、班级、专业,用空格分开,并按回车键确认:\\n\ scanf(\"%s%s%s%s\ printf(\"\\n请输入第%d个学生的单位名称、地点、性质、签约时间,用空格分开,并按回车键确认:\\n\ scanf(\"%s%s%s%s\ fprintf(fp,\"\\n%s %s %s %s %s %s %s %s\las,stu.pro,stu.danwei,stu.chengshi,stu.xingzhi,stu.shijian); } } } fclose(fp); } 11 沈 阳 航 院 设 计 用 纸 2、 显示学生信息 该函数主要是为下面的查询函数提供查询的依据。 该函数执行时,首先调用reads函数将文件中的学生信息读出然后输出所有学生信息。 具体程序段如下: void show()/*显示所有学生信息函数*/ {struct student stu[N]; int i,n; reads(stu,&n);/*从文件中读出学生信息*/ printf(\" *****************所有学生信息如下*****************\"); printf(\"\\n 序号 学号 姓名 班级 专业 单位 地点 性质 签约时间 \"); for(i=0;i 3、 查询相同单位学生信息函数 该函数的核心内容是输入单位名称实现对同一单位学生信息的调用。该函数执行时,首先调用reads函数将文件中的学生信息读入数组当中,并由用户输入待查询学生的就业单位,而后按照该单位进行查找,如果文件中存在该学生的数据,就按照调用学生函数的方法调 12 沈 阳 航 院 设 计 用 纸 用,否则不输出任何信息。对学生信息的具体调用是在结构体数组中实现的,当学生的信息被找到后,依次在数组的学生记录中寻找相同的信息,这些操作完成后,要调用的学生信息就被调用出来了,也就实现了查询的作用。 void danwei()/*学生单位信息查询*/ { struct student stu[N]; char danwei[20]; int i; reads(stu,&n); printf(\"\\n请输入待查询的单位名称,按回车键确认:\\n\"); scanf(\"%s\ for(i=0;i printf(\"\\n%5s%5s%5s%5s\\n\ro); } 4、查询相同城市学生信息函数 该函数的核心内容是输入城市名称实现对学生信息的调用。该函数执行时,首先调用reads函数将文件中的学生信息读入数组当中,并由用户输入待查询学生的城市,而后按照该城市进行查找,如果文件中存在该学生的数据,就按照调用学生函数的方法调用,否则不输出 13 沈 阳 航 院 设 计 用 纸 任何信息。对学生信息的具体调用是在结构体数组中实现的,当学生的信息被找到后,依次在数组的学生记录中寻找相同元素的信息,这些操作完成后,要调用的学生信息就被调用出来了,也就实现了查询的目的。 具体程序段如下: void chengshi()/*学生就业城市信息查询*/ { struct student stu[N]; char chengshi[20]; int i; reads(stu,&n); printf(\"\\n请输入待查询的城市名称,按回车键确认:\\n\"); scanf(\"%s\ for(i=0;i printf(\"\\n%5s%5s%5s%5s\\n\ro); } 5、查询相同单位性质学生信息函数 该函数的核心内容是输入性质实现对学生信息的调用。该函数执行时,首先调用reads函数将文件中的学生信息读入数组当中,并由用户输入待查询单位的性质,而后按照该单位性质进行查找,如果文件中存在该学生的数据,就按照调用学生函数的方法调用,否则不输出任何信息。对学生信息的具体调用是在结构体数组中实 14 沈 阳 航 院 设 计 用 纸 现的,当学生的信息被找到后,依次在数组的学生记录中寻找相同单位性质的信息,这些操作完成后,要调用的学生信息就被调用出来,也就实现了查询。 具体程序段如下: void xingzhi()/*学生就业单位性质信息的查询*/ { struct student stu[N]; char xingzhi[20]; int i; reads(stu,&n); printf(\"\\n请输入待查询的单位性质,按回车键确认:\\n\"); scanf(\"%s\ for(i=0;i printf(\"\\n%5s%5s%5s%5s\\n\clas,stu[i].pro); } 四、课设总结 之前在大一就学过了C语言,但是学的不是很好,基本处于模糊的状态,甚至对有些概念一点都不熟悉。但是,在这一周的课设时间里,通过自己查找资料和与同学们进行的探讨,还有老师的指导帮助,使我对C语 15 沈 阳 航 院 设 计 用 纸 言的知识有了更细致的理解,并掌握了一定的编程方法,也使我的C语言编程能力有很大的提高。虽然我们学的不是计算机专业,但对我们学机械类的学生来说C语言程序设计确实是一门很有用的学科,与我们的生活学习有紧密的联系。这次课设让我对C语言产生了更深厚的兴趣,也激励我以后对它更深入的学习。 五、参考文献 1 谭浩强.C程序设计.北京:清华大学出版社,2005 2 刘成等.C语言程序设计实验指导与习题集.北京:中国铁道出版社,2006 六、源程序 #include 16 沈 阳 航 院 设 计 用 纸 {char num[20]; char name[10]; char clas[10]; char pro[10]; char danwei[10]; char chengshi[10]; char xingzhi[10]; char shijian[10]; }stu[N]; int n; void menu(); void read(struct student stu[N],int *n); void show(); void add(); void danwei(); void chengshi(); void xingzhi(); void main() { int m; while(1) { menu(); printf(\"\\n请输入您要选择的操作序号,按回车键确认:\"); scanf(\"%d\ switch(m) { case 1: add();break; case 2: show();break; case 3: danwei();break; case 4: chengshi();break; case 5: xingzhi();break; case 6: exit(0); default: printf(\"输入错误,请输入列表中存在的序号!\\n \"); } } } 17 沈 阳 航 院 设 计 用 纸 void menu() { printf(\" ************************* 毕业生就业统计系统************************ \"); printf(\"\\n 1 录入学生信息\"); printf(\"\\n 2 显示所有学生数据\"); printf(\"\\n 3 输入单位名称\"); printf(\"\\n 4 输入城市名称\"); printf(\"\\n 5 输入单位性质\"); printf(\"\\n 6 退出\"); } void reads(struct student stu[N],int *n) { FILE *fp; int i=0; if((fp=fopen(\"d:\\\\student.txt\ { printf(\"文件打开失败!\\n \"); return; } else { for(i=0;!feof(fp);i++) fscanf(fp,\"%s%s%s%s%s%s%s%su[i].pro,stu[i].danwei,stu[i].chengshi,stu[i].xingzhi,stu[i].shijian); } *n=i; fclose(fp); } void add()/*录入学生信息函数*/ {FILE *fp; 18 沈 阳 航 院 设 计 用 纸 int n,i; struct student stu; if((fp=fopen(\"d:\\\\student.txt\ { printf(\"请输入要添加的学生数量,按回车键确认:\"); scanf(\"%d\ fseek(fp,0L,2); for(i=1;i<=n;i++) { printf(\"\\n请输入第%d个学生的学号、姓名、班级、专业,用空格分开,并按回车键确认:\\n\ scanf(\"%s%s%s%s\ printf(\"\\n请输入第%d个学生的单位名称、地点、性质、签约时间,用空格分开,并按回车键确认:\\n\ scanf(\"%s%s%s%s\ fprintf(fp,\"\\n%s %s %s %s %s %s %s %su.pro,stu.danwei,stu.chengshi,stu.xingzhi,stu.shijian); } } else { if((fp=fopen(\"d:\\\\student.txt\ { printf(\"请输入要添加的学生数量,按回车键确认:\"); scanf(\"%d\ for(i=1;i<=n;i++) { printf(\"\\n请输入第%d个学生的学号、姓名、班级、专业,用空格分开,并按回车键确认:\\n\ scanf(\"%s%s%s%s\ printf(\"\\n请输入第%d个学生的单位名称、地点、性质、签约时间,用空格分开,并按回车键确认:\\n\ scanf(\"%s%s%s%s\ fprintf(fp,\"\\n%s %s %s %s %s %s %s %s\ 19 沈 阳 航 院 设 计 用 纸 las,stu.pro,stu.danwei,stu.chengshi,stu.xingzhi,stu.shijian); } } } fclose(fp); } void show()/*显示所有学生信息函数*/ {struct student stu[N]; int i,n; reads(stu,&n);/*从文件中读出学生信息*/ printf(\" *****************所有学生信息如下*****************\"); printf(\"\\n 序号 学号 姓名 班级 专业 单位 地点 性质 签约时间 \"); for(i=0;i void danwei()/*学生同一单位信息查询*/ { struct student stu[N]; char danwei[20]; int i; reads(stu,&n); printf(\"\\n请输入待查询的单位名称,按回车键确认:\\n\"); scanf(\"%s\ for(i=0;i if(strcmp(danwei,stu[i].danwei)!=0) {printf(\"没有找到该学生信息\\n\"); return; } else 20 沈 阳 航 院 设 计 用 纸 printf(\"\\n%5s%5s%5s%5s\\n\ro); } void chengshi()/*学生同一城市信息查询*/ { struct student stu[N]; char chengshi[20]; int i; reads(stu,&n); printf(\"\\n请输入待查询的城市名称,按回车键确认:\\n\"); scanf(\"%s\ for(i=0;i if(strcmp(chengshi,stu[i].chengshi)!=0) {printf(\"没有找到该学生信息\\n\"); return; } else printf(\"\\n%5s%5s%5s%5s\\n\ro); } void xingzhi()/*学生就业单位同一性质的查询*/ { struct student stu[N]; char xingzhi[20]; int i; reads(stu,&n); printf(\"\\n请输入待查询的单位性质,按回车键确认:\\n\"); scanf(\"%s\ for(i=0;i if(strcmp(xingzhi,stu[i].xingzhi)!=0) {printf(\"没有找到该学生信息\\n\"); return; } else printf(\"\\n%5s%5s%5s%5s\\n\ 21 沈 阳 航 院 设 计 用 纸 ro); } 22 因篇幅问题不能全部显示,请点此查看更多更全内容