C语言课程设计实验报告-高校在职职工管理软件_第1页
C语言课程设计实验报告-高校在职职工管理软件_第2页
C语言课程设计实验报告-高校在职职工管理软件_第3页
C语言课程设计实验报告-高校在职职工管理软件_第4页
C语言课程设计实验报告-高校在职职工管理软件_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

PAGE课程设计课程名称程序设计课程设计设计题目高校在职职工管理软件班级与班级代码专业指导教师:学号:姓名:提交日期:姓名课程设计成绩评语:评价内容不及格及格中良优表达精练,格式准确,基本无错别字内容完整,思路清晰,结构严谨,设计科学,可操作性强程序能完成课程设计任务书所规定的任务,功能完善,独立分析和解决问题能力较好。代码简洁,算法清晰,可读性强无抄袭现象且课程设计报告体会深刻指导教师(签名)年月日1系统功能要求(需求分析):采用结构体数组或文件形式存储职工的信息,每个职工应包含如下几方面的信息:职工号、姓名、性别、所属二级单位、所学专业、职称、月工资,电话号码。软件由主函数(含欢迎界面)和下列6个功能模块组成:(1)减少一个职工(需指定要删除职工的职工号);(2)增加一个职工号(需输入要增加职工号的所有信息);(3)查找一个职工号的信息(需指定职工号或电话号码);(4)统计指定二级单位的职工人数、工资总额;(5)按职工的工资多少对职工排序(6)退出程序的运行。(正文宋体4号,行距固定为20英镑)2系统总体(概要)设计思想(1)开发与设计的总体思想高校在职职工管理软件设计算法说明:STEP1预处理,定义结构体STEP2进入欢迎界面STEP3选择某一种功能STEP4根据提示输入一个字母STEP5对于输入的字母编辑关于删除、增加、排序、查找、统计功能的函数STEP6如果输入的字母表示退出,退出系统高校在职职工管理软件系体模块结构图高校在职职工管理软件工资人数退出程序排序功能统计功能查找功能增加功能删除功能欢迎界面工资人数退出程序排序功能统计功能查找功能增加功能删除功能欢迎界面(3)系统文件及函数组成、功能(参考P154的表12-1)源文件函数名及其成分功能workers.cmain总控函数库函数及函数原型声明引用库函数及函数常数提供常数add_disp.cshowTable输出表头display显示所有职工信息函数addRecord在当前表的末尾增加新的信息handle_menu.chandle_menu菜单处理函数menu_select.cmenu_select菜单选择函数quit结束运行,退出que_remv.cfindRecord查找指定记录函数showTable打印查询到的职工信息removeRecord删除记录函数copyRecord将src指向的一条记录复制给dest指向的记录save_load.csaveRecords文件存储操作函数loadRecords文件读取操作函数sort_tongji.cTongji统计职工资料showTable打印统计二级单位的职工人数和工资总额sortInfo职工信息排序函数workers.h常数提供常数结构声明职工信息结构库函数及函数原型声明引用库函数及函数3系统详细设计(1)函数的描述a.本程序总共有8个文件:workers.hworkers.cadd_disp.csav_load.cque_remv.csort_tongji.chandle_menu.cmenu_select.cb.所涉及到的函数如下:(1).菜单处理函数函数原型:voidhandle_menu(void);//菜单处理功能:处理选择的菜单命令参数:void返回值:void工作方式:根据命令,调用相应函数要求:给出结束信息(2).菜单选择函数函数原型:intmenu_select(void);//菜单选择功能:接受用户选择的命令代码参数:void返回值:int工作方式:返回命令代码的整数值要求:只允许选择规定键,如果输入不合要求,则提醒用户重新输入(3).删除记录函数函数原型:voidremoveRecord(void);//删除指定的记录功能:删除内存数组内存数组中的指定记录参数:void返回值:void工作方式:根据给定的关键字,查找符合的记录并删除之。要求:将后面的记录前移,同时改变名次并给出相关信息(4).增加信息函数函数原型:voidaddRecord(void);//在表尾追加职工信息功能:增加记录参数:void返回值:void工作方式:从尾部开始逐个追加记录要求:将新的记录追加在记录尾部,并对记录进行计数(5).显示所有学生信息函数函数原型:voiddisplay(void);//显示信息功能:显示内存里的记录信息参数:void返回值:void工作方式:从头部开始逐个显示记录内容要求:报告是否有记录及记录条数和内容(6).查询指定职工信息函数函数原型:voidqueryInfo(void);//查询指定的职工信息功能:将一个文件的内容追加到另一个文件的尾部参数:void返回值:void工作方式:可以按照职工号或电话号码来查询要求:打印查询到的学生的信息或给出相关信息。(7).对职工信息进行排序函数原型:voidsort(void);//对职工进行排序功能:对职工信息进行排序参数:void返回值:void工作方式:按职工工资多少对职工进行排序要求:打印排序结果(8).统计二级单位人数和工资总额函数原型:voidtongji(void);//统计函数功能:统计二级单位人数和工资总额参数:void返回值:void工作方式:指定二级单位,然后再进行统计要求:统计后打印(9).文件存储操作函数函数原型:intsaveRecords(void);//文件存储功能:将记录存入默认文件wor_info或者指定文件参数:void返回值:成功0,失败-1工作方式:数组records被保存至指定文件要求:报告是否有记录可存,是否能正常建立或打开文件,根据要求执行存入操作并报告存入记录的条数(10).文件读取操作函数函数原型:intloadRecords(void);//文件读取功能:默认文件wor_info或者指定文件的记录取入内存参数:void返回值:成功0,失败-1工作方式:records为从指定文件中读取出的记录要求:报告是否有记录可存,是否能够正常打开文件,是否覆盖已有记录以及读取记录的条数(11).结束程序运行函数函数原型:voidquit(void);//结束运行功能:结束程序运行参数:void返回值:void工作方式:根据要求决定在退出前是否将修改的记录存入文件要求:结束运行之前,询问是否对修改的记录进行存储(12).输出表头函数函数原型:voidshowTable(void);//输出表头功能:输出表头信息参数:void返回值:void工作方式:输出一行表头信息要求:输出一行表头信息(13).查找指定记录函数原型函数原型:intfindRecord(char*target,inttargetType,intfrom);功能:查找指定的记录参数:char*target欲查找记录的某一项与target相同;inttargetType通过什么来查找;intfrom从第from个记录开始查找返回值:int(找到的记录的序号),若找不到则返回-1工作方式:根据给定的关键字,查找符合记录的序号要求:找不到则返回-1(2)主要函数流程图(2个以上,可参考材P148的写法)addRecordquit(3)编码(附后)4系统测试内容包括:程序调试情况(8幅以上测试结果截图);总结:本人C语言程序设计基础较差,因此,在写这个程序的时候遇到了诸多困难,多亏同学的帮忙我的程序才可以成功地运行,真的是自己之前不够刻苦,用功,写代码这种东西还是要多练,多做题才能有收获,在写那个登陆账号和密码的函数的时候,我调试了好久都没发现错误,最后。在同学的帮助下,成功发现是数组那里除了问题,居然少打了个中括号。所以本人数组和指针方面的知识点欠缺,还需要多多练习。虽然这份程序是参考学生成绩那份来找灵感的,还是出现了好多错误,最大的收货就是看到程序成功运行的那一刻。6结束语感谢李惠坤同学和林柔佳同学热心帮助。参考文献[1]谭浩强,C程序设计(第二版),北京:清华大学出版社,2001.1(左对齐,宋体,五号)[2]陈朔鹰,C语言程序设计习题集,北京:人民邮电出版社,2003.67附录(代码)#include<stdio.h>#include<stdlib.h>//#include<iostream>#include<conio.h>//conio是ConsoleInput/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如getch()函数等等。#include<string.h>#defineINITIAL_SIZE100//数组初始大小#defineINCR_SIZE50//数组每次增加的大小structworkers_info{//每个职工包含的信息 charnum[10];//职工号 charname[10];//姓名 charsex[3];//性别 charpost[10];//所属二级单位 charmajor[10];//所学专业 charjobname[10];//职称 floatsalary;//月工资 charphonenum[11];//电话号码}wk[10];typedefstructworkers_infoWrkInfo;externintnumWrks;//记录职工数externWrkInfo*records;//记录职工信息的数组externcharsavedTag;//信息是否已保存的标志,0为已保存,1为未保存externintarraySize;//数组大小voidhandle_menu(void);//菜单处理intmenu_select(void);//菜单选择voidremoveRecord(void);//删除指定的记录voidaddRecord(void);//在表尾追加职工信息voiddisplay(void);//显示信息voidqueryInfo(void);//查询指定的职工信息voidsortInfo(void);//对职工进行排序voidTongji(void);//统计函数intsaveRecords(void);//文件存储intloadRecords(void);//文件读取voidquit(void);//结束运行voidshowTable(void);//输出表头intfindRecord(char*target,inttargetType,intfrom);//char*target欲查找记录的某一项与target相同;inttargetType通过什么来查找;intfrom从第from个记录开始查找#include"workers.h"/**************************初始化*************************/intnumWrks=0;//记录的职工数WrkInfo*records=NULL;//记录职工信息的数据charsavedTag=0;//信息是否已保存的标志,1为未保存,0为保存intarraySize;//数组大小/**********************主函数********************/voidmain(){//初始化数组 chara[20]=,b[20]="0808",str[20];records=(WrkInfo*)malloc(sizeof(WrkInfo)*INITIAL_SIZE);system("color5A");if(records==NULL){printf("memoryfail!");exit(-1);}arraySize=INITIAL_SIZE;//printf("\n");printf("\t**********************************\n");printf("\t*这是一个*\n");printf("\t*高校在职职工简单管理程序*\n");printf("\t*可以对职工信息进行管理*\n");printf("\t*欢迎使用管理程序*\n");printf("\t**********************************\n");printf("\n");printf("\n");printf("请输入用户名<gt;和密码<0808>");while(1){ scanf("%s",str); if(!strcmp(str,a)){ scanf("%s",str); if(!strcmp(str,b)){ printf("登陆成功"); handle_menu(); } elseprintf("登陆失败"); }}}voidcopyRecord(WrkInfo*src,WrkInfo*dest);/**********************菜单处理函数********************/#include"workers.h"voidhandle_menu(void){for(;;){switch(menu_select()){case1:removeRecord();break;case2:addRecord();break;case3:queryInfo();break;case4:Tongji();break;case5:sortInfo();break;case6:display();break;case7:saveRecords();break;case8:loadRecords();break;case9:quit();}}}#include"workers.h"/**********************菜单选择函数menu_select********************/intmenu_select(){chars[2];intcn=0;printf("\n");printf("\t1.删除职工信息\n");printf("\t2.增加职工信息\n");printf("\t3.查询职工信息\n");printf("\t4.统计职工信息\n");printf("\t5.对职工信息进行排序\n");printf("\t6.显示职工信息\n");printf("\t7.保存学生信息至记录文件\n");printf("\t8.从记录文件读取学生信息\n");printf("\t9.结束运行\n");printf("\n\t左边数字对应功能选择,请选1-9:\n\n");for(;;){gets(s);cn=atoi(s);if(cn<1||cn>9)printf("\n\t输入错误,重选1-9:\n\n");elsebreak;}returncn;}/**********************结束运行,退出*参数void********************/voidquit(void){charstr[5];if(savedTag==1){printf("是否保存原来的记录?(Y/n)");gets(str);if(str[0]!='n'&&str[0]!='N')saveRecords();}free(records);exit(0);}#include"workers.h"/**********************输出表头********************/voidshowTable(void){printf("职工号\t姓名\t性别\t所属二级单位\t所学专业\t职称\t月工资\t电话号码\n");}/**********************显示所有职工信息函数********************/voiddisplay(void){inti;if(numWrks==0){printf("没有可供显示的记录!");return;}showTable();for(i=0;i<numWrks;i++){//打印职工信息printf("%s\t%s\t%s\t%s\t",records[i].num,records[i].name,records[i].sex,records[i].post,records[i].major);printf("%s\t%s\t%f\t%s\t",records[i].jobname,records[i].salary,records[i].phonenum);//打印满10个记录后停下来if(i%9==0&&i!=0){printf("输入任一字符后继续...\n");getch();printf("\n\n");showTable();}}}/*****************************************在当前表的末尾增加新的信息结果:*records中将记录的信息,如果数组*大小不够,会重新申请数组空间****************************************/voidaddRecord(void){ //records=realloc(records,(arraySize+INCR_SIZE)*sizeof(WrkInfo)); charstr[10]; intj; floatmark,sum;if(numWrks==0) printf("原来没有记录,现在建立新表\n"); else printf("下面在当前表的末尾增加新的信息\n"); while(1)//()中为1表示无条件反复循环 { printf("您将要添加一组信息,确定吗?(Y/n)"); gets(str); if(str[0]=='n'||str[0]=='N')//不再添加新的信息 break; if(numWrks>=arraySize)//现在的数组空间不足,需要重新申请空间 { records=realloc(records,(arraySize+INCR_SIZE)*sizeof(WrkInfo));//新空间大小变为(arraySize+INCR_SIZE)记录大小,即在原来基础上增加INCR_SIZE个记录大小 if(records==NULL) { printf("memoryfailed!"); exit(-1); } arraySize=arraySize+INCR_SIZE;//arraySize修改为新空间可保存的记录数 }printf("请输入职工号:");gets(records[numWrks].num);printf("请输入姓名:");gets(records[numWrks].name);printf("请输入性别(0为女,1为男):");gets(str);if(str[0]=='0')strcpy(records[numWrks].sex,"女");elsestrcpy(records[numWrks].sex,"男");printf("请输入所属二级单位:");gets(records[numWrks].post);printf("请输入所学专业:");gets(records[numWrks].major);printf("请输入职称:");gets(records[numWrks].jobname);printf("请输入月工资:");gets(str);records[numWrks].salary=(float)atof(str);printf("请输入电话号码:");gets(records[numWrks].phonenum);numWrks++;}printf("现在一共有%d条信息\n",numWrks);savedTag=1;}#include"workers.h"/**********************************************查找指定记录函数*参数:target:欲查找记录的某一项与target相同*targetType:表明通过那一项来查找,0为学号,1为姓名,2为名次*from:从第from个记录开始找*返回:找到的记录的序号,若找不到则返回-1*********************************************/intfindRecord(char*target,inttargetType,intfrom){inti;for(i=from;i<=numWrks;i++){if((targetType==0&&strcmp(target,records[i].num)==0)||(targetType==1&&strcmp(target,records[i].name)==0)||(targetType==2&&strcmp(target,records[i].post)==0))returni;}return-1;}voidqueryInfo(void){charstr[5];chartarget[20];inttype;intcount;inti;if(numWrks==0){printf("没有可供查询的记录");return;}while(1){printf("请输入查询的方式:(直接输入回车则结束查询)\n");printf("1.按职工号\n");printf("2.按电话号码\n");gets(str);if(strlen(str)==0)break;if(str[0]=='1'){printf("请输入欲查询的职工的职工号:");gets(target);type=0;}else{printf("请输入欲查询的职工的电话号码:");gets(target);type=1;}i=findRecord(target,type,0);if(i==1){//打印查询到的职工信息showTable();}count=0;while(i!=-1){count++;printf("%s\t%s\t%s\t%s\t%s\t%s\t%f\t%s",records[i].num,records[i].name,records[i].sex,records[i].post,records[i].major,records[i].jobname,records[i].salary,records[i].phonenum);i=findRecord(target,type,i+1);}if(count==0)printf("没有符合条件的职工!\n");elseprintf("一共找到了%d名职工的信息\n\n",count);}}/******************************删除记录函数***************************/voidremoveRecord(void){charstr[5];chartarget[20];inttype;inti,j;if(numWrks==0){printf("没有可供删除的记录\n\n");return;}while(1){printf("直接输入回车则结束移除操作)\n");printf("请输入欲删除的记录的职工号:\n");gets(target);type=0;i=findRecord(target,type,0);if(i==-1)printf("没有符合条件的职工!\n");while(i!=-1){showTable();printf("%s\t%s\t%s\t%s\t%s\t%s\t%f\t%s",records[i].num,records[i].name,records[i].sex,records[i].post,records[i].major,records[i].jobname,records[i].salary,records[i].phonenum);printf("确定要删除这个职工的信息吗?(y/N)");gets(str);if(str[0]=='y'||str[0]=='Y'){numWrks--;printf("该职工信息已经删除.\n");return;//将后面的记录前移for(j=i;j<numWrks;j++){copyRecord(&records[j+1],&records[j]);}}//取下一个符合条件的记录i=findRecord(target,type,i+1);}}savedTag=1;}/******************************************将src指向的一条记录复制给dest指向的记录*****************************************/voidcopyRecord(WrkInfo*src,WrkInfo*dest){strcpy(dest->num,src->num);strcpy(dest->name,src->name);strcpy(dest->sex,src->sex);strcpy(dest->post,src->post);strcpy(dest->major,src->major);strcpy(dest->jobname,src->jobname);dest->salary=src->salary;strcpy(dest->phonenum,src->phonenum);}#include"workers.h"/**********************************************查找指定记录函数*参数:target:欲查找记录的某一项与target相同*targetType:表明通过那一项来查找,0为学号,1为姓名,2为名次*from:从第from个记录开始找*返回:找到的记录的序号,若找不到则返回-1*********************************************/intfindRecord(char*target,inttargetType,intfrom){inti;for(i=from;i<=numWrks;i++){if((targetType==0&&strcmp(target,records[i].num)==0)||(targetType==1&&strcmp(target,records[i].name)==0)||(targetType==2&&strcmp(target,records[i].post)==0))returni;}return-1;}voidqueryInfo(void){charstr[5];chartarget[20];inttype;intcount;inti;if(numWrks==0){printf("没有可供查询的记录");return;}while(1){printf("请输入查询的方式:(直接输入回车则结束查询)\n");printf("1.按职工号\n");printf("2.按电话号码\n");gets(str);if(strlen(str)==0)break;if(str[0]=='1'){printf("请输入欲查询的职工的职工号:");gets(target);type=0;}else{printf("请输入欲查询的职工的电话号码:");gets(target);type=1;}i=findRecord(target,type,0);if(i==1){//打印查询到的职工信息showTable();}count=0;while(i!=-1){count++;printf("%s\t%s\t%s\t%s\t%s\t%s\t%f\t%s",records[i].num,records[i].name,records[i].sex,records[i].post,records[i].major,records[i].jobname,records[i].salary,records[i].phonenum);i=findRecord(target,type,i+1);}if(count==0)printf("没有符合条件的职工!\n");elseprintf("一共找到了%d名职工的信息\n\n",count);}}/******************************删除记录函数***************************/voidremoveRecord(void){charstr[5];chartarget[20];inttype;inti,j;if(numWrks==0){printf("没有可供删除的记录\n\n");return;}while(1){printf("直接输入回车则结束移除操作)\n");printf("请输入欲删除的记录的职工号:\n");gets(target);type=0;i=findRecord(target,type,0);if(i==-1)printf("没有符合条件的职工!\n");while(i!=-1){showTable();printf("%s\t%s\t%s\t%s\t%s\t%s\t%f\t%s",records[i].num,records[i].name,records[i].sex,records[i].post,records[i].major,records[i].jobname,records[i].salary,records[i].phonenum);printf("确定要删除这个职工的信息吗?(y/N)");gets(str);if(str[0]=='y'||str[0]=='Y'){numWrks--;printf("该职工信息已经删除.\n");return;//将后面的记录前移for(j=i;j<numWrks;j++){copyRecord(&records[j+1],&records[j]);}}//取下一个符合条件的记录i=findRecord(target,type,i+1);}}savedTag=1;}/******************************************将src指向的一条记录复制给dest指向的记录*****************************************/voidcopyRecord(WrkInfo*src,WrkInfo*dest){strcpy(dest->num,src->num);strcpy(dest->name,src->name);strcpy(dest->sex,src->sex);strcpy(dest->post,src->post);strcpy(dest->major,src->major);strcpy(dest->jobname,src->jobname);dest->salary=src->salary;strcpy(dest->phonenum,src->phonenum);}#include"workers.h"/***********************************文件存储操作函数*结果:数组records被保存至指定文件返回:成功0,失败-1*************************************/intsaveRecords(){FILE*fp;charfname[30];if(numWrks==0){printf("没有记录可存!");return-1;}printf("请输入要存入的文件名(直接回车选择文件wrk_info):");gets(fname);if(strlen(fname)==0)strcpy(fname,"wrk_info");if((fp=fopen(fname,"wb"))==NULL){printf("不能存入文件!\n");return-1;}printf("\n存文件...\n");fwrite(records,sizeof(WrkInfo)*numWrks,1,fp);fclose(fp);printf("%d条记录已经存入文件,请继续操作.\n",numWrks);savedTag=0;//更新是否已保存的标记return0;}/*********************************************文件读取操作函数*结果:records为从指定文件中读取出的记录*返回:成功0,失败-1**********************************************/intloadRecords(void){FILE*fp;charfname[30];charstr[5];if(numWrks!=0&&savedTag==0){printf("请选择您是要覆盖现有的记录(Y),还是要将");printf("读取的记录添加到现有记录之后(n)?\n");printf("直接回车则覆盖现有记录\n");gets(str);if(str[0]=='n'||str[0]=='N'){//将读取的记录添加到现有记录之后savedTag=1;}else{if(savedTag==1){//覆盖现有记录printf("读取文件将会更改原来的记录,");printf("是否保存原来的记录?(Y/n)");gets(str);if(str[0]!='n'&&str[0]!='N')saveRecords();}numWrks=0;}}printf("请输入要读取的文件名(直接回车选择文件wrk_info):");gets(fname);if(strlen(fname)==0)strcpy(fname,"wrk_info");if((fp=fopen(fname,"rb"))==NULL){printf("打不开文件!请重新选择\n");return-1;}printf("\n取文件...\n");while(!feof(fp)){//现在的数组空间不足,需要重新申请空间

温馨提示

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

评论

0/150

提交评论