会议签到系统课程设计报告书_第1页
会议签到系统课程设计报告书_第2页
会议签到系统课程设计报告书_第3页
会议签到系统课程设计报告书_第4页
会议签到系统课程设计报告书_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、./ 阳 航 空 工 业 学 院 课程设计学 号 5班 级 6402101姓 名 晨指导教师 王晓岩2007年 9 月 20 日20 / 24航空工业学院课程设计任务书院系:电子 专业:电子信息工程 班级:6402101学号:5 题目:会议签到系统一、课程设计时间2007年9月10日至2007年9月14日,共计1周,20学时。二、课程设计容用C语言编写软件完成以下任务:(1)数据信息(参加会议人员代号,性别,工作单位,职务,联系方式,是否签到等)保存在meeting.dat文件中。(2)签到。(3)按工作单位将数据信息排序。(4)统计实际参加会议的人数和缺席的人数。三、课程设计要求1. 程序质

2、量:² 贯彻结构化的程序设计思想。² 用户界面友好,功能明确,操作方便。² 用户界面中的菜单至少应包括“录入”、“人员签到”、“数据排序”、“统计参加和缺席人数”、“退出”5项,所有数据的改变都应该在相关文件中有所体现。² 代码应适当缩进,并给出必要的注释,以增强程序的可读性。2. 课程设计说明书:课程结束后,上交课程设计说明书和源程序。课程设计说明书的格式和容参见提供的模板。四、指导教师和学生签字指导教师:_ 学生签名:_五、说明书成绩六、教师评语目录一、需求分析1二、程序流程图2三、核心技术的实现说明与相应程序段9四、个人总结15五、参考文献15六、

3、源程序16一、需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为三个模块,其中每一个模块对应一个函数,他们的功能分别是:录入参加会议人员信息数据函数(add),人员签到数据函数(signin),排序函数(compositor)。在这些函数当中,录入信息和排序函数的实现严格按照题目的要求,而签到和统计参加人数和缺席人数都放到了函数(signin)里。1、录入参加会议人员信息数据函数 主要实现程序最初运行时参加会议人员信息数据的录入以与其后的运行中人员数据的追加功能;2、人员签到数据函数 实现的功能是按照参加会议人员的代号对人员进行签到,并对签到人员进行标记,最后统计并输出参加人数和

4、缺席人数。3、排序函数 实现的功能是按照人员代号的增序显示。 除上面介绍的功能之外,程序还具有退出功能,可以在程序运行完毕后选择退出。每一个参加会议人员信息都包含参加会议人员代号,性别,工作单位,职务,联系方式,是否签到,在程序当中,将人员信息类型定义为结构体类型,添加以与追加的人员信息直接写入D盘的meeting.dat文件中,其他函数每次对人员记录的访问,其数据来源都是meeting.dat文件,这样做不但可以保证人员数据的一致性,而且可以对人员数据进行永久保存,保证每次运行程序都可以采用原来的数据。二、程序流程图1、程序总体结构图2、具体功能框图(1)录入人员数据函数add开始定义文件指

5、针定义头指针链表信息存入文件输入信息到链表结束图2 录入人员数据函数(2)人员签到函数signin开始定义变量初值,文件指针,链表指针能否打开文件输出不能打开文件结束否feof(f1)是将文件中的信息读入链表释放P指针否关闭f1文件 a=0输出:请员工输入序号签到,输入0时结束签到否是是输入%d是M是否为空否i+输出结束签到,人员出勤结果如下输出应到%d人,实到%d人,缺席%d人,j,i,j-i结束图3人员签到函数3)按代号排序函数compositor开始定义文件指针,链表指针能否打开文件 meeting1.dat!feof(f1)定义指针n输出:不能打开文件输出:不能打开文件将信息输入链表释

6、放指针r=top结束结束能否打开文件 meeting2.datP是否为零否能否能否是是否否r指针内容小于p内容且r!=p是r=r->nextr!=p否是q=p;p=p0否r=topq->next=r;r0->next=q是q->next=top;top=qp0=p;p=p->nextp=NULL;p=top,否P不为空是输出链表中的信息关闭文件f1,f2结束图4按代号排序函数三、核心技术的实现说明与相应程序段本程序主要由三个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。在这些函数当中,录入数据函数、签到函数和排序函数是程序中较

7、为核心的部分,下面分别进行说明。1、录入数据函数录入数据分为两种情况,其一是在会议文件(meeting.dat)不存在的情况下,首先由程序创建一个新文件,并将录入的人员信息写入该文件当中;其二是在会议文件(meeting.dat)已经存在的情况下,此时文件要以读写方式或追加的方式打开,这样才可以保证以前已经存在的数据不丢失。具体的程序段如下:void add() /*录入员工信息子函数*/FILE *f1;finger top=NULL,p=NULL,t=NULL;p=(finger)malloc(sizeof(message);top=p;while(1)printf("n请输入员

8、工信息,输入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; if(f1=fopen("D:meeting.dat",

9、"w")=NULL) /*把链表息存入文件*/ printf("不能创建文件!"); exit(0); p=top; while(p!=NULL) fprintf(f1,"%d %s %s %s %s %dn",p->number,p->name,p->sex,p->workplace,p->job,p->tel); p=p->next; 2、人员签到函数该函数的核心容是人员签到和统计参加人数和缺席人数。该函数执行时,首先把meeting.dat文件息读入链表,并由用户输入人员代号,而后按0结

10、束签到。如果文件中存在该人员的数据,则进行标记,否则不标记。这时被标记的为1,未被标记的为0,最后统计出参加人数和缺席人数,具体程序段如下:void signin() /*签到,标记*/int a=1,i=0,j=0;FILE *f1;finger m=NULL,p=NULL,t=NULL,top=NULL;if(f1=fopen("D:meeting.dat","r")=NULL) /*把文件息读入链表*/printf("不能打开文件meeting.dat!");exit(0);p=(finger)malloc(sizeof(mes

11、sage);top=p;while(!feof(f1)fscanf(f1,"%d%s%s%s%s%dn",&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时结束签到&qu

12、ot;); 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、按代号排序函数对于代号的排序采用的排序算法是链表插入法,首先读取文件meeting.dat信息,在创建meeting2.dat文件,以便保存排序后的信息,该程序的实现主要是把指针变量插入到各个结点,进行比较,最终实现按代号的升序排列

13、。具体的程序段如下:void compositor() /*排序*/FILE *f1; FILE *f2;finger m=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) /*创建meetin

14、g2.dat文件*/printf("不能创建文件meeting2.dat!");exit(0);n=(finger)malloc(sizeof(message);top=n;while(!feof(f1) /*排序*/fscanf(f1,"%d%s%s%s%s%dn",&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;f

15、ree(n); /*/t->next=NULL;p0=NULL;p=top;while(p!=NULL)r=top;while(r->number<p->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; elseq->next=r;r0->next=q;p0=p;p=p->next;p=NULL; p=top; while(p!=NULL) /*将排序后信息写入文件meeting2

16、.dat*/ fprintf(f2,"%d %s %s %s %s %dn",p->number,p->name,p->sex,p->workplace,p->job,p->tel); printf("%d %s %s %s %s %dn",p->number,p->name,p->sex,p->workplace,p->job,p->tel); p=p->next;fclose(f1); fclose(f2);四、个人总结一周的课程设计使我更一深层次地学习了C语言,了解了C语

17、言,曾经课本没有认真地阅读,现在通过这门课程,使我不仅认真地看,反复地看,而且还仔细地研究了一翻,补上了以前学习的漏洞,刚开始时认为这门课程很难,但是经过了一翻研究和与老师和其他同学的沟通,一些问题还是解决了,但可以说这门课程还是有难度的,所以以后还要加强对这方面知识的学习,掌握好这门课程对我以后的专业也有很大的好处。程序大体上完成了课程的要求,但还是有些毛病不能解决,主函数不是总是循环的结构,如果改成这种结构,签到和排序都出问题,也许问题出现在我程序的各个部分都是我在书上找的,然后拼接在一起的,各个部分的连贯性不好,导致改后出错。五、参考文献1 谭浩强C程序设计:清华大学,20052 成等C

18、语言程序设计实验指导与习题集:中国铁道,2006六、源程序#include <stdlib.h>#include <malloc.h>#include <stdio.h>#include <string.h>#include <math.h>typedef struct message /*定义数据结构*/long int number;char name10;char sex3;char workplace20;char job5;long int tel;int flag;struct message *next;*finger;

19、 /*指向结构体的指针*/void menu() /*屏幕输出菜单*/printf("*n");printf("*1.录入员工信息 *n");printf("*2.在此签到,并输出人员签到结果 *n");printf("*3.排序 *n");printf("*4.退出 *n");printf("*n");void add() /*录入员工信息子函数*/FILE *f1;finger top=NULL,p=NULL,t=NULL;p=(finger)malloc(sizeof(

20、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=NUL

21、L; if(f1=fopen("D:meeting.dat","w")=NULL) /*把链表息存入文件*/ printf("不能创建文件!"); exit(0); p=top; while(p!=NULL) fprintf(f1,"%d %s %s %s %s %dn",p->number,p->name,p->sex,p->workplace,p->job,p->tel); p=p->next; void signin() /*签到,标记*/int a=1,i=0,j=

22、0;FILE *f1;finger m=NULL,p=NULL,t=NULL,top=NULL;if(f1=fopen("D:meeting.dat","r")=NULL) /*把文件息读入链表*/printf("不能打开文件meeting.dat!");exit(0);p=(finger)malloc(sizeof(message);top=p;while(!feof(f1)fscanf(f1,"%d%s%s%s%s%dn",&p->number,p->name,p->sex,p->

23、;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(&

24、quot;结束签到,人员出勤结果如下:n");printf("应到%d人,实到%d人,缺勤%d人n",j,i,j-i);void compositor() /*排序*/FILE *f1; FILE *f2;finger m=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

25、=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%dn",&n->number,n->name,n->sex,n->workplace,n->job,&n->tel);n->fl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论