会议签到系统.docx
《会议签到系统.docx》由会员分享,可在线阅读,更多相关《会议签到系统.docx(15页珍藏版)》请在冰豆网上搜索。
会议签到系统
沈阳航空工业学院
课程设计
学号200604061111
班级6406103
姓名张天烨
指导教师王晓岩
2008年3月16日
沈阳航空工业学院
课程设计任务书
院系:
机械与汽车学院专业:
机械设计及自动化班级:
6406103
学号:
200604061111题目:
会议签到系统
一、课程设计时间
2008年3月10日至2008年3月14日,共计1周,20学时。
二、课程设计内容
用C语言编写软件完成以下任务:
(1)数据信息(参加会议人员代号,姓名,性别,工作单位,职务,联系方式,是否签到等)保存在meeting.dat文件中。
(2)签到。
(3)按工作单位将数据信息排序。
(4)统计实际参加会议的人数和缺席的人数。
三、课程设计要求
1.程序质量:
✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便。
✧用户界面中的菜单至少应包括“名单录入”、“人员签到”、“数据排序”、“统计参加和缺席人数”、“退出”5项,所有数据的改变都应该在相关文件中有所体现。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2.课程设计说明书:
课程结束后,上交课程设计说明书和源程序。
课程设计说明书的格式和内容参见提供的模板。
四、指导教师和学生签字
指导教师:
________学生签名:
________
五、说明书成绩
六、教师评语
目录
一、需求分析1
二、程序流程图2
三、核心技术的实现说明及相应程序段5
四、个人总结9
五、参考文献10
六、源程序10
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为四个模块,其中每一个模块对应一个函数,他们的功能分别是:
录入参加会议人员信息数据函数(luru),人员签到数据函数(qiandao),排序函数(paixu),统计参加人数和缺席人数函数(show)里。
1、录入参加会议人员信息数据函数主要实现程序最初运行时参加会议人员信息数据的录入以及其后的运行中人员数据的追加功能;
2、人员签到数据函数实现的功能是按照参加会议人员的代号对人员进行签到,并对签到人员进行标记。
3、排序函数实现的功能是按照人员代号的增序显示。
除上面介绍的功能之外,程序还具有退出功能,可以在程序运行完毕后选择退出。
4、统计参加人数和缺席人数函数统计并输出参加人数和缺席人数。
每一个参加会议人员信息都包含参加会议人员代号,姓名,性别,工作单位,职务,联系方式,是否签到,在程序当中,将人员信息类型定义为结构体类型,添加以及追加的人员信息直接写入meeting.dat文件中,其他函数每次对人员记录的访问,其数据来源都是meeting.dat文件,这样做不但可以保证人员数据的一致性,而且可以对人员数据进行永久保存,保证每次运行程序都可以采用原来的数据。
二、程序流程图
1、程序总体结构图
图1程序总体结构图
2、具体功能框图
(1)录入人员数据函数luru
图2录入人员数据函数
(2)人员签到函数qiandao
图3人员签到函数
3)按工作单位排序函数paixu
图4按工作单位排序函数
4)统计参加人数和缺席人数函数show
图5统计参加人数和缺席人数函数
三、核心技术的实现说明及相应程序段
本程序主要由三个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。
在这些函数当中,录入数据函数、签到函数和排序函数是程序中较为核心的部分,下面分别进行说明。
1、录入数据函数
录入数据首先请用户输入要录入数据的数量,然后由程序创建一个新文件,并将录入的人员信息写入该文件当中。
具体的程序段如下:
voidluru()/*录入会议人员记录*/
{FILE*fp;
inti;
if((fp=fopen("meeting.dat","w+"))!
=NULL)/*为读写建立一个新的文件*/
{
printf("******************请输入要录入的会议人员数量,按回车键确认:
");
scanf("%d",&n);
for(i=0;i{printf("*****************请输入第%d个会议人员的代号姓名性别工作单位职务联系方式:
",i+1);
scanf("%s%s%s%s%s%s",wor[i].num,wor[i].name,wor[i].sex,wor[i].workplace,wor[i].job,wor[i].tel);
wor[i].qiandao=0;
fwrite(&wor[i],sizeof(structworker),1,fp);
}
printf("***********************************录入成功!
***********************************\n");
}
fclose(fp);
}
2、人员签到函数
该函数的核心内容是人员签到。
该函数执行时,首先把meeting.dat文件中信息读入结构体,并由用户输入人员代号。
如果文件中存在该人员的数据,则进行标记,否则不标记。
这时被标记的为1,未被标记的为0,具体程序段如下:
voidqiandao()/*会议人员签到*/
{FILE*fp;
inti;
charnum[10];
if((fp=fopen("meeting.dat","r+"))!
=NULL)
{
printf("******************请输入要签到的会议人员代号,按回车键确认:
");
scanf("%s",num);
for(i=0;iif(strcmp(num,wor[i].num)==0)
{wor[i].qiandao++;
printf("******************%s签到成功!
*********************\n",wor[i].name);}
for(i=0;ifwrite(&wor[i],sizeof(structworker),1,fp);
}
fclose(fp);
}
3、按工作单位排序函数
对于工作单位的排序采用的排序算法是冒泡法,首先读取文件meeting.dat信息,在创建worker.dat文件,以便保存排序后的信息,该函数的实现主要是把结构体中工作单位的信息逐个进行比较,最终实现按工作单位的升序排列。
具体的程序段如下:
voidpaixu()/*按工作单位将数据信息排序*/
{
structworkertemp;
FILE*fp;
inti,j;
if((fp=fopen("worker.dat","wb"))==NULL)
{printf("文件打开失败!
");
return;
}
for(i=0;ifor(j=0;j{
if(strcmp(wor[j].workplace,wor[j+1].workplace)<0)
{
strcpy(temp.num,wor[j].num);
strcpy(temp.name,wor[j].name);
strcpy(temp.sex,wor[j].sex);
strcpy(temp.workplace,wor[j].workplace);
strcpy(temp.job,wor[j].job);
strcpy(temp.tel,wor[j].tel);
temp.qiandao=wor[j].qiandao;
strcpy(wor[j].num,wor[j+1].num);
strcpy(wor[j].name,wor[j+1].name);
strcpy(wor[j].sex,wor[j+1].sex);
strcpy(wor[j].workplace,wor[j+1].workplace);
strcpy(wor[j].job,wor[j+1].job);
strcpy(wor[j].tel,wor[j+1].tel);
wor[j].qiandao=wor[j+1].qiandao;
strcpy(wor[j+1].num,temp.num);
strcpy(wor[j+1].name,temp.name);
strcpy(wor[j+1].sex,temp.sex);
strcpy(wor[j+1].workplace,temp.workplace);
strcpy(wor[j+1].job,temp.job);
strcpy(wor[j+1].tel,temp.tel);
wor[j+1].qiandao=temp.qiandao;
}
}
printf("代号姓名性别工作单位职务联系方式签到情况\n");
for(i=0;i{printf("%5s%5s%5s%5s%5s%5s%5d\n",wor[i].num,wor[i].name,wor[i].sex,wor[i].workplace,wor[i].job,wor[i].tel,wor[i].qiandao);
fwrite(&wor[i],sizeof(structworker),1,fp);
}
fclose(fp);
}
四、个人总结
一周的课程设计使我更一深层次地学习了C语言,了解了C语言,曾经课本没有认真地阅读,现在通过这门课程,使我不仅认真地看,反复地看,而且还仔细地研究了一翻,补上了以前学习的漏洞,刚开始时认为这门课程很难,但是经过了一翻研究和与老师和其他同学的沟通,一些问题还是解决了,但可以说这门课程还是有难度的,所以以后还要加强对这方面知识的学习,掌握好这门课程对我以后的专业也有很大的好处。
程序大体上完成了课程的要求,但还是有些毛病不能解决,主函数不是总是循环的结构,如果改成这种结构,签到和排序都出问题,也许问题出现在我程序的各个部分都是我在书上找的,然后拼接在一起的,各个部分的连贯性不好,导致改后出错。
五、参考文献
1谭浩强.C程序设计.北京:
清华大学出版社,2005
2刘成等.C语言程序设计实验指导与习题集.北京:
中国铁道出版社,2006
六、源程序
#include
#include
#defineN20
structworker
{charnum[10];
charname[10];
charsex[10];
charworkplace[10];
charjob[10];
chartel[10];
intqiandao;
}wor[N];
intn;
voidluru()/*录入会议人员记录*/
{FILE*fp;
inti;
if((fp=fopen("meeting.dat","w+"))!
=NULL)/*为读写建立一个新的文件*/
{
printf("******************请输入要录入的会议人员数量,按回车键确认:
");
scanf("%d",&n);
for(i=0;i{printf("*****************请输入第%d个会议人员的代号姓名性别工作单位职务联系方式:
",i+1);
scanf("%s%s%s%s%s%s",wor[i].num,wor[i].name,wor[i].sex,wor[i].workplace,wor[i].job,wor[i].tel);
wor[i].qiandao=0;
fwrite(&wor[i],sizeof(structworker),1,fp);
}
printf("***********************************录入成功!
***********************************\n");
}
fclose(fp);
}
voidqiandao()/*会议人员签到*/
{FILE*fp;
inti;
charnum[10];
if((fp=fopen("meeting.dat","r+"))!
=NULL)
{
printf("******************请输入要签到的会议人员代号,按回车键确认:
");
scanf("%s",num);
for(i=0;iif(strcmp(num,wor[i].num)==0)
{wor[i].qiandao++;
printf("******************%s签到成功!
*********************\n",wor[i].name);}
for(i=0;ifwrite(&wor[i],sizeof(structworker),1,fp);
}
fclose(fp);
}
voidpaixu()/*按工作单位将数据信息排序*/
{
structworkertemp;
FILE*fp;
inti,j;
if((fp=fopen("worker.dat","wb"))==NULL)
{printf("文件打开失败!
");
return;
}
for(i=0;ifor(j=0;j{
if(strcmp(wor[j].workplace,wor[j+1].workplace)<0)
{
strcpy(temp.num,wor[j].num);
strcpy(temp.name,wor[j].name);
strcpy(temp.sex,wor[j].sex);
strcpy(temp.workplace,wor[j].workplace);
strcpy(temp.job,wor[j].job);
strcpy(temp.tel,wor[j].tel);
temp.qiandao=wor[j].qiandao;
strcpy(wor[j].num,wor[j+1].num);
strcpy(wor[j].name,wor[j+1].name);
strcpy(wor[j].sex,wor[j+1].sex);
strcpy(wor[j].workplace,wor[j+1].workplace);
strcpy(wor[j].job,wor[j+1].job);
strcpy(wor[j].tel,wor[j+1].tel);
wor[j].qiandao=wor[j+1].qiandao;
strcpy(wor[j+1].num,temp.num);
strcpy(wor[j+1].name,temp.name);
strcpy(wor[j+1].sex,temp.sex);
strcpy(wor[j+1].workplace,temp.workplace);
strcpy(wor[j+1].job,temp.job);
strcpy(wor[j+1].tel,temp.tel);
wor[j+1].qiandao=temp.qiandao;
}
}
printf("代号姓名性别工作单位职务联系方式签到情况\n");
for(i=0;i{printf("%5s%5s%5s%5s%5s%5s%5d\n",wor[i].num,wor[i].name,wor[i].sex,wor[i].workplace,wor[i].job,wor[i].tel,wor[i].qiandao);
fwrite(&wor[i],sizeof(structworker),1,fp);
}
fclose(fp);
}
voidshow()
{
inti,j=0;
for(i=0;iif(wor[i].qiandao==0)
j++;
printf("参加会议人数%d\n缺席人数%d\n人数总计%d\n",j,n-j,n);
}
main()
{
printf("*************************会议签到系统****************************\n");
printf("***************************1名单录入*****************************\n");
printf("***************************2人员签到*****************************\n");
printf("***************************3数据排序*****************************\n");
printf("***************************4统计参加和缺席人数*******************\n");
printf("***************************5退出*********************************\n");
while
(1)
{
switch(getch())
{case'1':
luru();break;
case'2':
qiandao();break;
case'3':
paixu();break;
case'4':
show();break;
case'5':
exit(0);
}
}
}