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

下载本文档

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

文档简介

会议签到系统课程设计...../沈阳航空工业学院课程设计学号04021035班级6402101姓名赵晨指导老师王晓岩9月20日沈阳航空工业学院课程设计任务书院系:电子专业:电子信息工程班级:6402101学号:04021035 题目:会议签到系统一、课程设计时间9月10日至9月14日,累计1周,20课时。二、课程设计内容用C语言编写软件完成以下任务:(1)数据信息(参与会议人员代号,姓名,性别,工作单位,职务,联络方法,是否签到等)保留在meeting.dat文件中。(2)签到。(3)按工作单位将数据信息排序。(4)统计实际参与会议人数和缺席人数。三、课程设计要求1.程序质量:落实结构化程序设计思想。用户界面友好,功效明确,操作方便。用户界面中菜单最少应包含”名单录入”、”人员签到”、”数据排序”、”统计参与和缺席人数”、”退出”5项,全部数据改变全部应该在相关文件中有所表现。代码应合适缩进,并给出必需注释,以增强程序可读性。2.课程设计说明书:课程结束后,上交课程设计说明书和源程序。课程设计说明书格式和内容参见提供模板。四、指导老师和学生签字指导老师:________学生署名:________五、说明书成绩六、老师评语目录TOC\o"1-3"\h\z\u一、需求分析 1二、程序步骤图 2三、关键技术实现说明及对应程序段 9四、个人总结 15五、参考文件 15六、源程序 16一、需求分析经过对程序设计题目标分析可知,整个程序设计实现大致分为三个模块,其中每一个模块对应一个函数,她们功效分别是:录入参与会议人员信息数据函数(add),人员签到数据函数(signin),排序函数(compositor)。在这些函数当中,录入信息和排序函数实现严格根据题目标要求,而签到和统计参与人数和缺席人数全部放到了函数(signin)里。1、录入参与会议人员信息数据函数关键实现程序最初运行时参与会议人员信息数据录入和其后运行中人员数据追加功效;2、人员签到数据函数实现功效是根据参与会议人员代号对人员进行签到,并对签到人员进行标识,最终统计并输出参与人数和缺席人数。3、排序函数实现功效是根据人员代号增序显示。除上面介绍功效之外,程序还含有退出功效,能够在程序运行完成后选择退出。每一个参与会议人员信息全部包含参与会议人员代号,姓名,性别,工作单位,职务,联络方法,是否签到,在程序当中,将人员信息类型定义为结构体类型,添加和追加人员信息直接写入D盘meeting.dat文件中,其它函数每次对人员统计访问,其数据起源全部是meeting.dat文件,这么做不仅能够确保人员数据一致性,而且能够对人员数据进行永久保留,确保每次运行程序全部能够采取原来数据。二、程序步骤图1、程序总体结构图2、具体功效框图(1)录入人员数据函数add开始开始定义文件指针定义头指针链表信息存入文件输入信息到链表结束图2录入人员数据函数(2)人员签到函数signin开始开始定义变量初值,文件指针,链表指针能否打开文件输出不能打开文件结束否feof(f1)是将文件中信息读入链表释放P指针否关闭f1文件a=0输出:请职员输入序号签到,输入0时结束签到否是是输入%d输入%d是是MM是否为空否否i++i++输出结束签到,人员出勤结果以下输出结束签到,人员出勤结果以下输出应到%d人,实到%d人,缺席%d人,j,输出应到%d人,实到%d人,缺席%d人,j,i,j-i结束结束图3人员签到函数3)按代号排序函数compositor开始开始定义文件指针,链表指针能否打开文件meeting1.dat!feof(f1)定义指针n输出:不能打开文件输出:不能打开文件将信息输入链表释放指针r=top结束结束能否打开文件meeting2.datP是否为零否能否能否是是否否否r指针内容小于p内容且r!=pr指针内容小于p内容且r!=p是是r=r->nextr=r->nextr!=pr!=p否否是是q=pq=p;p=p0否否r==topr==topq->next=r;r0->next=qq->next=r;r0->next=q是是q->next=topq->next=top;top=qp0=pp0=p;p=p->nextp=NULLp=NULL;p=top,否否P不为空P不为空是是输出链表中信息输出链表中信息关闭文件f1,f2关闭文件f1,f2结束结束图4按代号排序函数三、关键技术实现说明及对应程序段本程序关键由三个自定义函数和一个主函数组成,其中主函数以菜单形式调用其它函数来实现要求全部功效。在这些函数当中,录入数据函数、签到函数和排序函数是程序中较为关键部分,下面分别进行说明。1、录入数据函数录入数据分为两种情况,其一是在会议文件(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; if((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); } 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、按代号排序函数对于代号排序采取排序算法是链表插入法,首先读取文件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; 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; } 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);}四、个人总结一周课程设计使我更一深层次地学习了C语言,了解了C语言,曾经书本没有认真地阅读,现在经过这门课程,使我不仅认真地看,反复地看,而且还仔细地研究了一翻,补上了以前学习漏洞,刚开始时认为这门课程极难,可是经过了一翻研究和和老师和其它同学沟通,部分问题还是处理了,但能够说这门课程还是有难度,所以以后还要加强对这方面知识学习,掌握好这门课程对我以后专业也有很大好处。程序大致上完成了课程要求,但还是有些毛病不能处理,主函数不是总是循环结构,假如改成这种结构,签到和排序全部出问题,可能问题出现在我程序各个部分全部是我在书上找,然后拼接在一起,各个部分连贯性不好,造成改后犯错。五、参考文件1谭浩强.C程序设计.北京:清华大学出版社,2刘成等.C语言程序设计试验指导和习题集.北京:中国铁道出版社,六、源程序#include<stdlib.h>#include<malloc.h>#include<stdio.h>#include<string.h>#include<math.h>typedefstructmessage{/*定义数据结构*/ longintnumber; charname[10]; charsex[3]; charworkplace[20]; charjob[5]; longinttel; intflag; structmessage*next;}*finger;/*指向结构体指针*/voidmenu(){/*屏幕输出菜单*/ printf("********************************************************************************\n"); printf("**1.录入职员信息**\n"); printf("**2.在此签到,并输出人员签到结果**\n"); printf("**3.排序**\n"); printf("**4.退出**\n"); printf("********************************************************************************\n");}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; if((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; }}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); } 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);}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;

温馨提示

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

评论

0/150

提交评论