会议签到系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

沈阳航空工业学院课程设计学号200604021035班级6402101姓名赵晨指导教师王晓岩2007年9月20日沈阳航空工业学院课程设计任务书院系:电子专业:电子信息工程班级:6402101学号:200604021035题目:会议签到系统一、课程设计时间2007年9月10日至2007年9月14日,共计1周,20学时。二、课程设计内容用C语言编写软件完成以下任务:(1)数据信息(参加会议人员代号,姓名,性别,工作单位,职务,联系方式,是否签到等)保存在meeting.dat文件中。(2)签到。(3)按工作单位将数据信息排序。(4)统计实际参加会议的人数和缺席的人数。三、课程设计要求1.程序质量:贯彻结构化的程序设计思想。用户界面友好,功能明确,操作方便。用户界面中的菜单至少应包括“名单录入”、“人员签到”、“数据排序”、“统计参加和缺席人数”、“退出”5项,所有数据的改变都应该在相关文件中有所体现。代码应适当缩进,并给出必要的注释,以增强程序的可读性。2.课程设计说明书:课程结束后,上交课程设计说明书和源程序。课程设计说明书的格式和内容参见提供的模板。四、指导教师和学生签字指导教师:________学生签名:________五、说明书成绩六、教师评语沈阳航院设计用纸I目录一、需求分析............................................................1二、程序流程图........................................................2三、核心技术的实现说明及相应程序段...............9四、个人总结...........................................................15五、参考文献...........................................................16六、源程序...............................................................16沈阳航院设计用纸1一、需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为三个模块,其中每一个模块对应一个函数,他们的功能分别是:录入参加会议人员信息数据函数(add),人员签到数据函数(signin),排序函数(compositor)。在这些函数当中,录入信息和排序函数的实现严格按照题目的要求,而签到和统计参加人数和缺席人数都放到了函数(signin)里。1、录入参加会议人员信息数据函数主要实现程序最初运行时参加会议人员信息数据的录入以及其后的运行中人员数据的追加功能;2、人员签到数据函数实现的功能是按照参加会议人员的代号对人员进行签到,并对签到人员进行标记,最后统计并输出参加人数和缺席人数。3、排序函数实现的功能是按照人员代号的增序显示。除上面介绍的功能之外,程序还具有退出功能,可以在程序运行完毕后选择退出。沈阳航院设计用纸2每一个参加会议人员信息都包含参加会议人员代号,姓名,性别,工作单位,职务,联系方式,是否签到,在程序当中,将人员信息类型定义为结构体类型,添加以及追加的人员信息直接写入D盘的meeting.dat文件中,其他函数每次对人员记录的访问,其数据来源都是meeting.dat文件,这样做不但可以保证人员数据的一致性,而且可以对人员数据进行永久保存,保证每次运行程序都可以采用原来的数据。二、程序流程图1、程序总体结构图沈阳航院设计用纸32、具体功能框图(1)录入人员数据函数add沈阳航院设计用纸4图2录入人员数据函数(2)人员签到函数signin开始定义文件指针定义头指针链表信息存入文件输入信息到链表结束沈阳航院设计用纸5开始定义变量初值,文件指针,链表指针能否打开文件输出不能打开文件结束否feof(f1)是将文件中的信息读入链表释放P指针否关闭f1文件a=0输出:请员工输入序号签到,输入0时结束签到否是是沈阳航院设计用纸6图3人员签到函数3)按代号排序函数compositor输入%dM是否为空i++输出结束签到,人员出勤结果如下是否输出应到%d人,实到%d人,缺席%d人,j,i,j-i结束沈阳航院设计用纸7开始定义文件指针,链表指针能否打开文件meeting1.dat!feof(f1)定义指针n输出:不能打开文件输出:不能打开文件将信息输入链表释放指针r=top结束结束能否打开文件meeting2.datP是否为零否能否能否是是否沈阳航院设计用纸8r指针内容小于p内容且r!=pr=r-nextr!=pq=p;p=p0r==topq-next=top;top=qq-next=r;r0-next=qp=NULL;p=top,否是否是否是p0=p;p=p-next沈阳航院设计用纸9图4按代号排序函数三、核心技术的实现说明及相应程序段本程序主要由三个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。在这些函数当中,录入数据函数、签到函数和排序函数是程序中较为核心的部分,下面分别进行说明。关闭文件f1,f2P不为空输出链表中的信息结束否是沈阳航院设计用纸101、录入数据函数录入数据分为两种情况,其一是在会议文件(meeting.dat)不存在的情况下,首先由程序创建一个新文件,并将录入的人员信息写入该文件当中;其二是在会议文件(meeting.dat)已经存在的情况下,此时文件要以读写方式或追加的方式打开,这样才可以保证以前已经存在的数据不丢失。具体的程序段如下:voidadd(){/*录入员工信息子函数*/FILE*f1;fingertop=NULL,p=NULL,t=NULL;p=(finger)malloc(sizeof(message));top=p;while(1){printf(\n请输入员工信息,输入0时结束录入);scanf(%d%s%s%s%s%d,&p-number,p-name,p-sex,p-workplace,p-job,&p-tel);/*分部分输入*/p-flag=0;if(p-number==0){free(p);t-next=NULL;break;}t=p;p=(finger)malloc(sizeof(message));t-next=p;}p=NULL;沈阳航院设计用纸11if((f1=fopen(D:\\meeting.dat,w))==NULL){/*把链表中信息存入文件*/printf(不能创建文件!!);exit(0);}p=top;while(p!=NULL){fprintf(f1,%d%s%s%s%s%d\n,p-number,p-name,p-sex,p-workplace,p-job,p-tel);p=p-next;}}2、人员签到函数该函数的核心内容是人员签到和统计参加人数和缺席人数。该函数执行时,首先把meeting.dat文件中信息读入链表,并由用户输入人员代号,而后按0结束签到。如果文件中存在该人员的数据,则进行标记,否则不标记。这时被标记的为1,未被标记的为0,最后统计出参加人数和缺席人数,具体程序段如下:voidsignin(){/*签到,标记*/inta=1,i=0,j=0;FILE*f1;fingerm=NULL,p=NULL,t=NULL,top=NULL;if((f1=fopen(D:\\meeting.dat,r))==NULL){/*把文件中信息读入链表*/printf(不能打开文件meeting.dat!);exit(0);沈阳航院设计用纸12}p=(finger)malloc(sizeof(message));top=p;while(!feof(f1)){fscanf(f1,%d%s%s%s%s%d\n,&p-number,p-name,p-sex,p-workplace,p-job,&p-tel);p-flag=0;t=p;p=(finger)malloc(sizeof(message));t-next=p;}free(p);t-next=NULL;fclose(f1);m=top;while(a!=0){/*签到*/printf(请员工输入序号签到,输入0时结束签到);scanf(%d,&a);while(m!=NULL){if(m-number==a){m-flag=1;i++;}m=m-next;j++;}}printf(结束签到,人员出勤结果如下:\n);printf(应到%d人,实到%d人,缺勤%d人\n,j,i,j-i);}3、按代号排序函数对于代号的排序采用的排序算法是链表插入法,首先沈阳航院设计用纸13读取文件meeting.dat信息,在创建meeting2.dat文件,以便保存排序后的信息,该程序的实现主要是把指针变量插入到各个结点,进行比较,最终实现按代号的升序排列。具体的程序段如下:voidcompositor(){/*排序*/FILE*f1;FILE*f2;fingerm=NULL,n=NULL,t=NULL,top=NULL,p,p0,r,r0,q;if((f1=fopen(D:\\meeting.dat,r))==NULL){/*读取文件meeting.dat信息*/printf(不能打开文件meeting.dat!);exit(0);}if((f2=fopen(D:\\meeting2.dat,w))==NULL){/*创建meeting2.dat文件*/printf(不能创建文件meeting2.dat!);exit(0);}n=(finger)malloc(sizeof(message));top=n;while(!feof(f1)){/*排序*/fscanf(f1,%d%s%s%s%s%d\n,&n-number,n-name,n-sex,n-workplace,n-job,&n-tel);n-flag=0;t=n;n=(finger)malloc(sizeof(message));t-next=n;}free(n);/**/t-next=NULL;p0=NULL;沈阳航院设计用纸14p=top;while(p!=NULL){r=top;while((r-numberp-number)&&(r!=p)){r0=r;r=r-next;}if(r!=p){q=p;p0-next=p-next;p=p0;if(r==top){q-next=top;top=q;}else{q-next=r;r0-next=q;}}p0=p;p=p-next;}p=NULL;p=top;while(p!=NULL){/*将排序后信息写入文件meeting2.dat*/fprintf(f2,%d%s%s%s%s%d\n,p-number,p-name,p-sex,p-workplace,p-job,p-tel);printf(%d%s%s%s%s%d\n,p-number,p-name,p-sex,p-workplace,p-job,p-tel);p=p-next;}fclose(f1);fclose(f2);沈阳航院设计用纸15}四、个人总结一周的课程设计使我更一深层次地学习了C语言,了解了C语言,曾经课本没有认真地阅读,现在通过这门课程,使我不仅认真地看,反复地看,而且还仔细地研究了一翻,补上了以前学习的漏洞,刚开始时认为这门课程很难,但是经过了一翻研究和与老师和其他同学的沟通,一些问题还是解决了,但可以说这门课程还是有难度的,所以以后还要加强对这方面知识的学习,掌握好这门课程对我以后的专业也有很大的好处。程序大体上完成了课程的要求,但还是有些毛病不能解决,主函数不是总是循环的结构,如果改成这种结构,签到和排序都出问题,也许问题出现在

1 / 24
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功