毕业生就业统计系统.docx
《毕业生就业统计系统.docx》由会员分享,可在线阅读,更多相关《毕业生就业统计系统.docx(16页珍藏版)》请在冰豆网上搜索。
毕业生就业统计系统
题目:
毕业生就业统计系统
一、课程设计时间
2010~11第2学期第15周,共计1周,20学时。
二、课程设计内容
用C语言编写软件完成以下任务:
1)录入毕业生的信息(学号,姓名,班级,专业),并保存到一个磁盘文件中;
2)录入每个毕业生就业单位信息(单位名称、性质、地点),签约时间;
3)统计毕业生去向(统计相同单位的学生、统计同一城市的信息、统计同一性质的单位信息);
三、课程设计要求
程序质量:
✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便。
用户界面中的菜单至少应包括录入毕业生信息、就业等项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:
✧课程结束后,上交课程设计说明书和源程序。
课程设计说明书的内容参见提供的模板。
四、指导教师和学生签字
指导教师:
学生签名:
五、成绩
六、教师评语
目录
一、需求分析1
二、设计分析3
三、主要界面截图9
四、技术要点12
五、个人总结14
六、参考文献15
七、源程序15
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为以下几个模块,其中每一个模块对应一个函数,它们的功能分别是:
读取文件信息函数,录入学生信息函数,查询函数(包括对学生工作单位、城市、单位性质的查询)。
1、录入学生信息函数主要实现程序最初运行时学生信息的录入以及其后的运行中学生信息的追加功能;
2、查询函数实现的功能是按照要求对学生的信息记录进行查询、调用;
3、查询相同单位学生信息函数按照题目的具体要求实现的是对相同单位学生的信息的调用、查询;
4、查询相同城市学生信息函数按照题目的具体要求实现的是对相同城市学生的信息的调用、查询;
5、查询相同性质单位信息函数按照题目的具体要求实现的是对相同性质单位的信息的调用、查询;
6、退出函数实现的是在程序的一次运行当中循环执行所有功能时根据需要终止程序的执行的功能。
每一个学生记录都包含学号、姓名、班级、专业,而每一个学生的单位信息包含单位名称、地点、性质还有签约时间,在程序当中,将学生记录类型定义为结构体类型,添加以及追加的学生信息直接写入D盘的student.dat文件中,其它函数每次对学生记录的访问,其数据来源都是student.dat文件,这样做不但可以保证学生数据的一致性,而且可以对学生数据进行永久保存,保证每次运行程序都可以采用原来的数据。
二、设计分析
1、程序总体结构图
(1)读取学生信息函数reads()
Y
N
N
Y
(2)录入学生信息和单位信息函数add
读写方式打开D盘studeng.txt文件不成功?
真假
写方式打开文件不成功
输入追加学生数量n
从文件读出学生数量记录数量赋给k
输出文件打开失败
输入学生数量n
文件位置指针重新回到开头
将n写入文件
返回
学生记录总数n+k写入文件
循环变量i=1
文件位置指针定位在结尾fseek
当i<=n时
循环变量i=1
输入信息并写入文件i++
当i<=n时输入学生信息和单位信息
并写入文件i++
关闭文件
(3)调用相同单位的学生信息danwei
循环变量i=0
从文件中读取学生数据
输出“请输入待查询的单位名称,按回车确认”
当i<=n
strcmp(danwei,stu[i].danwei)==0
假真
输出学生学生信息
(4)调用相同城市的学生信息chengshi
循环变量i=0
从文件中读取学生数据
输出“请输入待查询的城市名称,按回车确认”
当i<=n
strcmp(chengshi,stu[i].chengshi)==0
假真
输出学生学生信息
(5)调用相同单位性质的学生信息xingzhi
循环变量i=0
从文件中读取学生数据
输出“请输入待查询的性质名称,按回车确认”
当i<=n
strcmp(xingzhi,stu[i].xingzhi)==0
假真
输出学生学生信息
三、主要界面截图
图1程序界面
图2录入学生信息
图3按单位查询
图4按城市查询
图5按单位性质查询
图6退出系统
四、技术要点
本程序主要由六个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其它函数来实现要求的所有功能。
在这些函数当中,录入信息函数、查询信息函数程序中较为核心的部分,下面分别进行说明。
1、录入信息函数
添加信息分为两种情况,其一是在学生文件(student.txt)不存在的情况下,首先由程序创建一个新文件,并将录入的学生信息写入该文件当中;其二是在学生文件(student.txt)已经存在的情况下,此时文件要以读写方式或追加的方式打开,这样才可以保证以前已经存在的数据不丢失。
2、查询相同单位学生信息函数
该函数的核心内容是输入单位名称实现对同一单位学生信息的调用。
该函数执行时,首先调用reads函数将文件中的学生信息读入数组当中,并由用户输入待查询学生的就业单位,而后按照该单位进行查找,如果文件中存在该学生的数据,就按照调用学生函数的方法调用,否则不输出任何信息。
对学生信息的具体调用是在结构体数组中实现的,当学生的信息被找到后,依次在数组的学生记录中寻找相同的信息,这些操作完成后,要调用的学生信息就被调用出来了,也就实现了查询的作用。
3、查询相同城市学生信息函数
该函数的核心内容是输入城市名称实现对学生信息的调用。
该函数执行时,首先调用reads函数将文件中的学生信息读入数组当中,并由用户输入待查询学生的城市,而后按照该城市进行查找,如果文件中存在该学生的数据,就按照调用学生函数的方法调用,否则不输出任何信息。
对学生信息的具体调用是在结构体数组中实现的,当学生的信息被找到后,依次在数组的学生记录中寻找相同元素的信息,这些操作完成后,要调用的学生信息就被调用出来了,也就实现了查询的目的。
4、查询相同单位性质学生信息函数
该函数的核心内容是输入性质实现对学生信息的调用。
该函数执行时,首先调用reads函数将文件中的学生信息读入数组当中,并由用户输入待查询单位的性质,而后按照该单位性质进行查找,如果文件中存在该学生的数据,就按照调用学生函数的方法调用,否则不输出任何信息。
对学生信息的具体调用是在结构体数组中实现的,当学生的信息被找到后,依次在数组的学生记录中寻找相同单位性质的信息,这些操作完成后,要调用的学生信息就被调用出来,也就实现了查询。
五、个人总结
之前在大一就学过了C语言,但是学的不是很好,,对有些概念一点都不熟悉。
但是,在这一周的课设时间里,通过自己查找资料和与同学们进行的探讨,使我对C语言的知识有了更细致的理解,并掌握了一定的编程方法,也使我的C语言编程能力有很大的提高。
虽然我们学的不是计算机专业,但对我们学工科的学生来说C语言程序设计确实是一门很有用的学科,与我们的生活学习有紧密的联系。
这次课设让我对C语言产生了更深厚的兴趣,也激励我以后对它更深入的学习。
六、参考文献
1谭浩强.C程序设计.北京:
清华大学出版社,2005
2刘成等.C语言程序设计实验指导与习题集.北京:
中国铁道出版社,2006
七、源程序
#include
#include
#include
#include
#defineN20
structstudent
{charnum[20];
charname[10];
charbanji[10];
charzhuanye[10];
chardanwei[10];
charchengshi[10];
charxingzhi[10];
charshijian[10];
}stu[N];
intn;
voidmenu()
{
printf("*************************************************");
printf("\t1请录入录入学生信息\t\t2按单位名称统计\n");
printf("\t3按输入城市名称统计\t\t4按输入单位性质统计\n");
printf("\t5完全退出\n");
printf("**********************************************\n");
}
voidreads(structstudentstu[N],int*n)
{
FILE*fp;
inti=0;
if((fp=fopen("d:
\\student.txt","r"))==NULL)/*在指定目录下创建或打开文件*/
{printf("文件打开失败!
\n");
return;
}
else
{
for(i=0;!
feof(fp);i++)
fscanf(fp,"%s%s%s%s%s%s%s%s",stu[i].num,stu[i].name,stu[i].banji,stu[i].zhuanye,stu[i].danwei,stu[i].chengshi,stu[i].xingzhi,stu[i].shijian);
}
*n=i;
fclose(fp);
}
voidadd()/*录入学生信息函数*/
{FILE*fp;
intn,i;
structstudentstu;
if((fp=fopen("d:
\\student.txt","r+"))!
=NULL)/*在指定目录下创建或打开文件*/
{
printf("请输入添加学生数量,按回车键确认:
");
scanf("%d",&n);
fseek(fp,0L,2);
for(i=1;i<=n;i++)
{printf("\n请输入第%d个学生的学号、姓名、班级、专业,用空格分开,并按回车键确认:
\n",i);
scanf("%s%s%s%s",stu.num,stu.name,stu.banji,stu.zhuanye);
printf("\n请输入第%d个学生的单位名称、地点、性质、签约时间,用空格分开,并按回车键确认:
\n",i);
scanf("%s%s%s%s",stu.danwei,stu.chengshi,stu.xingzhi,stu.shijian);
fprintf(fp,"\n%s%s%s%s%s%s%s%s",stu.num,stu.name,stu.banji,stu.zhuanye,stu.danwei,stu.chengshi,stu.xingzhi,stu.shijian);
}
}
else
{
if((fp=fopen("d:
\\student.txt","w"))!
=NULL)/*在指定目录下创建或打开文件*/{
printf("请输入添加学生数量,按回车键确认:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{printf("\n请输入第%d个学生的学号、姓名、班级、专业,用空格分开,并按回车键确认:
\n",i);
scanf("%s%s%s%s",stu.num,stu.name,stu.banji,stu.zhuanye);
printf("\n请输入第%d个学生的单位名称、地点、性质、签约时间,用空格分开,并按回车键确认:
\n",i);
scanf("%s%s%s%s",stu.danwei,stu.chengshi,stu.xingzhi,stu.shijian);
fprintf(fp,"\n%s%s%s%s%s%s%s%s",stu.num,stu.name,stu.banji,stu.zhuanye,stu.danwei,stu.chengshi,stu.xingzhi,stu.shijian);
}
}
}
fclose(fp);
}
voiddanwei()/*学生同一单位信息查询*/
{
structstudentstu[N];
chardanwei[20];
inti;
reads(stu,&n);
printf("\n请输入单位名称:
\n");
scanf("%s",danwei);
for(i=0;iif(strcmp(danwei,stu[i].danwei)==0)
if(strcmp(danwei,stu[i].danwei)!
=0)
{printf("没有找到该学生\n");
return;
}
else
printf("\n%5s%5s%5s%5s\n",stu[i].num,stu[i].name,stu[i].banji,stu[i].zhuanye);
}
voidchengshi()/*学生同一城市信息查询*/
{
structstudentstu[N];
charchengshi[20];
inti;
reads(stu,&n);
printf("\n请输入城市名称:
\n");
scanf("%s",chengshi);
for(i=0;iif(strcmp(chengshi,stu[i].chengshi)==0)
if(strcmp(chengshi,stu[i].chengshi)!
=0)
{printf("没有找到该学生信息\n");
return;
}
else
printf("\n%5s%5s%5s%5s\n",stu[i].num,stu[i].name,stu[i].banji,stu[i].zhuanye);/*输出信息*/
}
voidxingzhi()/*学生就业单位同一性质的查询*/
{
structstudentstu[N];
charxingzhi[20];
inti;
reads(stu,&n);
printf("\n请输入单位性质:
\n");
scanf("%s",xingzhi);
for(i=0;iif(strcmp(xingzhi,stu[i].xingzhi)==0)
if(strcmp(xingzhi,stu[i].xingzhi)!
=0)
{printf("没有找到该学生信息\n");
return;
}
else
printf("\n%5s%5s%5s%5s\n",stu[i].num,stu[i].name,stu[i].banji,stu[i].zhuanye);
}
voidmenu();
voidread(structstudentstu[N],int*n);
voidadd();
voiddanwei();
voidchengshi();
voidxingzhi();
voidmain()
{
intm;
while
(1)
{
printf("\t\t\t\t学生毕业信息管理\n");
menu();
printf("\n请选择操作序号,按回车键确认:
");
scanf("%d",&m);
switch(m)
{case1:
add();break;
case2:
danwei();break;
case3:
chengshi();break;
case4:
xingzhi();break;
case5:
exit(0);
default:
printf("输入错误,请输入存在的序号!
\n");
}
}
}