教职工系统课程设计_第1页
教职工系统课程设计_第2页
教职工系统课程设计_第3页
教职工系统课程设计_第4页
教职工系统课程设计_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

1、 课程设计课程名称 程序设计课程设计 设计题目 班级与班级代码 专 业 计算机科学与技术 指导教师: 学 号: 姓 名: 提交日期: 年 月 日 广东财经大学教务处制姓名 课程设计成绩 评语:评价内容不及格及格中良优表达精练,格式准确,基本无错别字内容完整,思路清晰,结构严谨,设计科学,可操作性强程序能完成课程设计任务书所规定的任务,功能完善,独立分析和解决问题能力较好。代码简洁,算法清晰,可读性强无抄袭现象且课程设计报告体会深刻 指导教师(签名) 年 月 日教职工系统课程设计1 系统功能要求(需求分析):采用结构体数组或文件形式存储职工的信息,每个职工应包含如下几方面的信息:职工号、姓名、性

2、别、所属二级单位、所学专业、职称、月工资,电话号码。软件由主函数(含欢迎界面)和下列6个功能模块组成:(1)减少一个职工的信息(需指定要删除职工的职工号或姓名或电话号码);(2)增加一个职工号信息(需输入要增加职工号的所有信息);(3)查找一个职工号的信息(需指定职工号或电话号码或姓名);(4)统计指定二级单位的职工人数、工资总额;(5)按职工的工资多少对职工排序;(6)退出程序的运行。描述所选题目(或主题)的功能设计要求。(正文宋体4号,行距固定为20英镑)2 系统总体(概要)设计思想(1)开发与设计的总体思想(二级标题缩进两格,宋体四号)高校在职职工管理软件算法说明:step 1:预处理,

3、定义结构体;step 2:进入欢迎界面;step 3:选择菜单对应的某一种功能;step 4:根据提示输入数字序号;step 5:对输入的数字序号编辑关于对职工数据进行编辑、查找、统计和排序的函数;step 6:重新进入菜单界面,返回到step3;step 7:如果输入数字表示退出,退出系统。(2)系体模块结构图(3) 系统文件及函数组成、功能(参考P154的表12-1)源文件函数名或其他成分功能worker.cmain总控函数menu_select菜单选择handle_menu菜单处理quit结束运行add_disp.cshow输出表格信息addRecord在表尾追加信息que_remv_m

4、odi_stat.cremoveRecord删除指定的记录findinfo查找指定的记录copyRecord复制记录statistics统计二级单位信息save_load.csave文件存储load文件读取worker.h常数提供常数结构声明学生成绩结构3 系统详细设计 (1) 函数的描述 头文件文件名称:worker.h功 能:声明函数原型,包含文件及自定义宏和数据结构要 求:报告是否能正常打开文件执行存入操作及存入记录的条数 主函数函数原型:int main(void)功 能:控制程序,显示欢迎界面并检测密码是否正确参 数:void返 回 值:int要 求:管理菜单命令并完成初始化,密码输

5、入错误三次,自动关闭程序。 菜单处理函数函数原型:void handle_menu(void)功 能:处理选择的菜单命令参 数:void返 回 值:void工作方式:根据命令调用相应函数要 求:给出结束信息 菜单选择函数函数原型:int mune_select(void)功 能:接收用户选择的命令代码参 数:void返 回 值:int工作方式:返回命令代码的整数值要 求:只允许选择指定的按键,如果输入不正确,提醒用户重新输入 退出函数 函数原型:void quit(void) 功能:提醒是否保存记录,并退出程序。 参数:void 返回值:void 工作方式:根据用户选择判断是否调用保存函数,并

6、退出。 要求:若不保存记录,则要释放内存。 显示函数 函数原型:void show(void) 功能:显示记录的信息 参数:void 返回值:void 工作方式:用print函数把记录输出 要求:工整 添加信息函数 函数原型:void addRecord(void) 功能:添加信息到记录中 参数:void 返回值:void 工作方式:根据顺序将信息添加到记录中,并判断有无重复的职工号。 要求:相同职工号不得用两次 删除记录函数 函数原型:void removeRecord(void) 功能:删除记录中的信息 参数:void 返回值:void 工作方式:根据用户选择方式查询所需删除的记录,再将其

7、从内存中删除。 要求:要有不同的选择方式 排序函数 函数原型:void sortInfo(void) 功能:将记录信息进行排序 参数:void 返回值:void 工作方式:根据用户选择方式将记录信息从小到大排序或从大到小排序等 要求:正确处理排序要求 复制函数 函数原型:void copyRecord(WorkInfo *src, WorkInfo *dest) 功能:将src指向的一条记录复制到dest指向的记录。 参数:源记录WorkInfo *src, 目的记录WorkInfo *dest 返回值:void 工作方式:将源记录复制到目的记录中 要求:正确复制记录 统计函数 函数原型:vo

8、id statistics(void) 功能:统计二级单位的信息 参数:void 返回值:void 工作方式:将用户所选二级单位所包含的记录统计并整理 要求:无 查询函数 函数原型:int findwkr(char *target, int targetType, int from) 功能:查询指定的记录号 参数: char *target, int targetType, int from 返回值:int 记录号 工作方式:将所给信息与所有信息进行匹配,若有则返回记录号 要求:无 查找二级单位函数 函数原型:int findunit(char *target, int from) 功能:查找

9、二级单位 参数:char *target, int from 返回值:int 记录号 工作方式:将所给二级单位与所有二级单位相匹配,若有相同的则返回记录号 要求:无 查询职工信息函数 函数原型:void findinfo(void) 功能:查找职工的信息 参数:void 返回值:void 工作方式:根据用户所选方式查询记录中职工的信息并显示 要求:要有不同查询方式 存储函数 函数原型:int saveRecords(void) 功能:将记录存储到文件中 参数:void 返回值:int 是否存储成功标志 工作方式:无 要求:无 读取函数 函数原型:int loadRecords(void) 功能

10、:读取文件中的记录信息并显示 参数:void 返回值:int 是否读取成功标志 工作方式:无 要求:无 (2)主要函数流程图(2个以上,可参考材P148的写法) (3)编码(附后)4 系统测试内容包括:程序调试情况(8幅以上测试结果截图);5、总结:在本次程序设计中使用的软件是Microsoft Visual Studio 2015以及codeblock,由于本人比较粗心大意,在打码中经常出现拼写错误,但在软件即使报错的情况下都修改了过来,此外,设计的过程中也遇到了一些阻碍,但在同学的帮助和老师的指导下终于度过了难关,还有由于运用了清屏函数,使得程序的界面整洁了许多,6 结束语感谢胡玉平老师在

11、这整个过程中的指导以及帮助。参考文献内容包括:列出课程设计中所参考的所有书目,格式如下:1刘振安 刘燕君 单继龙,C程序设计课程设计(第2版),北京:机械工业出版社,2009.11附程序清单 worker.h#ifndef H_WORKER_HH#define H_WORKER_HH#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>#include<windows.h>#define INITIAL_SIZE 5/100#define INCR_

12、SIZE 5/0struct worker_infochar number15;char name20;char gender7;char unit20;char major20;char telnum15;float wager;char title10;typedef struct worker_info WorkInfo;extern int numWorks;extern WorkInfo *records;extern char savedTag;extern int arraySize;void handle_menu(void);int menu_select(void);voi

13、d addRecord(void);void removeRecord(void);void sortInfo(void);int saveRecords(void);int loadRecords(void);void quit(void);void show(void);void findinfo(void);void copyRecord(WorkInfo* src,WorkInfo* dest);int findunit(char *target, int from);int findwkr(char *target,int type,int from);#endifworker.c#

14、include"worker.h"int numWorks=0;WorkInfo *records=NULL;char savedTag=0;int arraySize;int main()char key ="0000"char getkey6;int count = 0;records=(WorkInfo*)malloc(sizeof(WorkInfo)*INITIAL_SIZE);if(records=NULL)printf("memory fail!");exit(-1);arraySize=INITIAL_SIZE;prin

15、tf("n");printf("t*n");printf("t* 这是一个 *n");printf("t* 职工信息管理程序 *n");printf("t* 可以对职工信息进行管理 *n");printf("t* 欢迎使用管理程序 *n");printf("t* By:15计二陈文奕 *n");printf("t*n");printf("t密码:");gets(getkey);while(strcmp(getkey,

16、key)!=0)printf("密码错误,请重新输入");count+;if(count=3)quit();system("cls");printf("t*n");printf("t* 这是一个 *n");printf("t* 职工信息管理程序 *n");printf("t* 可以对职工信息进行管理 *n");printf("t* 欢迎使用管理程序 *n");printf("t* By:15计二陈文奕 *n");printf("

17、;t*n");printf("t密码:");gets(getkey);system("cls");handle_menu();void handle_menu(void)for(;)switch(menu_select()case 1:show();break;case 2:addRecord();break;case 3:findinfo();break;case 4:removeRecord();break;case 5:sortInfo();break; case 6: statistics(); break;case 7:saveRec

18、ords();break;case 8:loadRecords();break;case 9:quit();int menu_select()char s2;int cn=0;printf("n");printf("t1.显示职工信息n");printf("t2.增加职工信息n");printf("t3.查询职工信息n");printf("t4.删除职工信息n");printf("t5.对职工信息进行排序n");printf("t6.对职工信息进行统计n"

19、);printf("t7.保存职工信息至记录文件n");printf("t8.从记录文件读取职工信息n");printf("t9.结束运行n");printf("nt左边数字对应功能选择,请选1-9n");for(;)gets(s);cn=atoi(s);if(cn<1|cn>8)printf("nt输入错误,重选1-9:");else break;return cn;void quit(void)char str5;if(savedTag=1)printf("是否保存原来

20、的记录?(Y/N)");gets(str);if(str0!='0'&&str0='N')saveRecords();free(records);exit(0);add_show.c#include"worker.h"void show(void) int i;char cn;if (numWorks = 0) printf("没有可供显示的记录!n");printf("n按Enter键返回菜单。n");while (cn = getchar() != 'n')

21、continue;system("cls");return;/打印职工信息printf("%-11s %-6s %-4s %-8s %-16s %-8s %-6s %-11sn"," 职工号"," 姓名","性别","二级单位"," 专业"," 职称","月工资"," 电话");for (i = 0; i < numWorks; i+) printf("%-11s %-6s %-4

22、s %-8s %-16s %-8s %6g %-11sn",recordsi.number, , recordsi.gender, recordsi.unit, recordsi.major, recordsi.title, recordsi.wager, recordsi.telnum);printf("n一共有%d条信息。", numWorks);printf("nn按Enter键返回菜单。n");while (cn = getchar() != 'n')continue;system("

23、cls");/添加记录void addRecord() int i;char s;char str;char temp30;float wager;if (numWorks = 0)printf("原来没有记录,现在建立新表。n");elseprintf("下面在当前表的末尾增加新的信息。n");Sleep(1500);while (1) system("cls");printf("您将要添加一组信息,是否确定?(Y/N)");while (1) str = getchar();if (str = 

24、9;Y' | str = 'y' | str = 'N' | str = 'n')break;elseprintf("输入错误,重选'Y'或'N':");if(str!='n')getchar();getchar();system("cls");if (str = 'N' | str = 'n') system("cls");break; /不再添加新的信息if (numWorks >= arr

25、aySize) records = realloc(records, (arraySize + INCR_SIZE)*sizeof(WorkInfo); /数组空间不足,新空间大小变为(arraySize+INCR_SIZE)记录大小if (records = NULL) printf("Memory failed!");Sleep(3000);exit(-1);arraySize = arraySize + INCR_SIZE; /arraySize修改为新空间可保存的记录数printf("请输入职工号:");gets(temp);while (str

26、len(temp) = 0) printf("职工号不能为空!n");printf("请重新输入:");gets(temp);for (i = 0; i < numWorks; i+) while (strcmp(recordsi.number, temp) = 0) system("cls");printf("t 该职工号已经存在! n");printf("t 是否继续添加信息? n");printf("t Y or N n");printf("请选择:&q

27、uot;);while (1) s = getchar();if (s = 'Y' | s = 'y' | s = 'N' | s = 'n')break;elseprintf("输入错误,重选'Y'或'N':");if (s != 'n')getchar();getchar();system("cls");if (s = 'n' | s = 'N') savedTag = 1;system("cls&

28、quot;);return;printf("请输入职工号:");gets(temp);while (strlen(temp) = 0) printf("职工号不能为空!n");printf("请重新输入:");gets(temp);strcpy(recordsnumWorks.number, temp);printf("请输入姓名:");gets(temp);while (strlen(temp) = 0) printf("姓名不能为空!n");printf("请重新输入:"

29、);gets(temp);strcpy(recordsnumW, temp);printf("请输入性别('F'为女,'M'为男):");while (1) str = getchar();if (str = 'F' | str = 'f' | str = 'M' | str = 'm')break;elseprintf("输入错误,重输'F'或'M':");if(str!='n')getcha

30、r();getchar();if (str = 'F' | str = 'f')strcpy(recordsnumWorks.gender, "女");elsestrcpy(recordsnumWorks.gender, "男");printf("请输入所属二级单位:");gets(temp);while (strlen(temp) = 0) printf("所属二级单位不能为空!n");printf("请重新输入:");gets(temp);strcpy(rec

31、ordsnumWorks.unit, temp);printf("请输入专业:");gets(recordsnumWorks.major);printf("请输入职称:");gets(recordsnumWorks.title);printf("请输入月工资:");while (scanf("%f", &wager) != 1) printf("输入错误,请重新输入:");getchar();getchar();recordsnumWorks.wager = wager;printf(&

32、quot;请输入电话:");gets(recordsnumWorks.telnum);numWorks+; /输入一组记录后,职工数加1system("cls");printf("添加成功!");Sleep(1500);printf("现在一共有%d条信息。n", numWorks);savedTag = 1; /输入新的职工信息后,信息保存标志为1,表示未保存printf("n按Enter键返回菜单。n");while (str = getchar() != 'n')continue;s

33、ystem("cls");find_remv_stat.c#include"worker.h"/删除指定记录void removeRecord() char str5; /查询方式字符串char target20; /查询目标数据项char s;int type; /查询项int count; /查询到的人数int i, j;if (numWorks = 0) printf("没有可供删除的记录!n");printf("n按Enter键返回菜单。");while (s = getchar() != 'n&#

34、39;)continue;system("cls");return;while (1) printf("t* 删除方式 *n");printf("t*_*n");printf("t* 1 | 按职工号 *n");printf("t* 2 | 按姓名 *n");printf("t* 3 | 按电话号码 *n");printf("t*-*n");printf("t* Enter | 返回菜单 *n");printf("t*n&qu

35、ot;);printf("n请输入删除方式(序号):");/检查输入错误for (;) gets(str);if (strlen(str) = 0)break;if (str0 != '1' && str0 != '2' && str0 != '3')printf("输入错误!请重新输入:");elsebreak;system("cls");if (strlen(str) = 0)break;if (str0 = '1') printf(&

36、quot;请输入欲删除的职工的职工号:");gets(target);type = 0;else if (str0 = '2') printf("请输入欲删除的职工的姓名:");gets(target);type = 1;else printf("请输入欲删除的职工的电话号码:");gets(target);type = 2;system("cls");i = findwkr(target, type, 0); /从0号开始找,查询项type,查询目标数据项targetcount = 0;printf(&qu

37、ot;查找中");for (j = 0; j < 5; j+) Sleep(350);printf(".");system("cls");while (i != -1) count+; /查询到的人数+1i = findwkr(target, type, i + 1); /从i+1条记录器查找下一条符合条件的记录/如果找到的职工数为0,返回上一层if (count = 0) printf("没有找到该职工!n");printf("n按Enter键返回上一层。");while (s = getchar

38、() != 'n')continue;system("cls");/如果找到职工数为1if (count = 1) i = findwkr(target, type, 0);printf("%-11s %-6s %-4s %-8s %-16s %-8s %-6s %-11sn"," 职工号", " 姓名", "性别", "二级单位", " 专业", " 职称", "月工资", " 电话&qu

39、ot;);printf("%-11s %-6s %-4s %-8s %-16s %-8s %6g %-11sn",recordsi.number, , recordsi.gender, recordsi.unit, recordsi.major, recordsi.title, recordsi.wager, recordsi.telnum);printf("t 是否删除该职工信息? n");printf("t Y or N n");printf("请选择:");while (1) s =

40、 getchar();if (s = 'Y' | s = 'y' | s = 'N' | s = 'n')break;elseprintf("输入错误,重选'Y'或'N':");if (s != 'n')getchar();getchar();system("cls");if (s = 'y' | s = 'Y') printf("正在删除");for (j = 0; j < 5; j+

41、) Sleep(350);printf(".");system("cls");numWorks-;/将后面的记录往前移for (j = i; j < numWorks; j+)copyRecord(&recordsj + 1, &recordsj);printf("删除成功!n");printf("n按Enter键返回上一层。n");while (s = getchar() != 'n')continue;system("cls");/如果找到职工数大于1,

42、输入职工号确定欲删除的职工信息if (count > 1) printf("%-11s %-6s %-4s %-8s %-16s %-8s %-6s %-11sn"," 职工号", " 姓名", "性别", "二级单位", " 专业", " 职称", "月工资", " 电话");i = findwkr(target, type, 0);while (i != -1) printf("%-11s %-6

43、s %-4s %-8s %-16s %-8s %6g %-11sn",recordsi.number, , recordsi.gender, recordsi.unit, recordsi.major, recordsi.title, recordsi.wager, recordsi.telnum);i = findwkr(target, type, i + 1);printf("n找到多名职工,请进一步输入欲删除的职工的职工号:");gets(target);type = 0;i = findwkr(target, type, 0);s

44、ystem("cls");if (i = -1) printf("没有找到该职工!n");printf("n按Enter键返回上一层。");while (s = getchar() != 'n')continue;system("cls");if (i != -1) printf("%-11s %-6s %-4s %-8s %-16s %-8s %-6s %-11sn"," 职工号", " 姓名", "性别", &quo

45、t;二级单位", " 专业", " 职称", "月工资", " 电话");printf("%-11s %-6s %-4s %-8s %-16s %-8s %6g %-11sn",recordsi.number, , recordsi.gender, recordsi.unit, recordsi.major, recordsi.title, recordsi.wager, recordsi.telnum);printf("t 是否删除该职工信息? n

46、");printf("t Y or N n");printf("请选择:");while (1) s = getchar();if (s = 'Y' | s = 'y' | s = 'N' | s = 'n')break;elseprintf("输入错误,重选'Y'或'N':");if (s != 'n')getchar();getchar();system("cls");if (s = 

47、9;y' | s = 'Y') printf("正在删除");for (j = 0; j < 5; j+) Sleep(350);printf(".");system("cls");numWorks-;/将后面的记录往前移for (j = i; j < numWorks; j+)copyRecord(&recordsj + 1, &recordsj);printf("删除成功!n");printf("n按Enter键返回上一层。n");whil

48、e (s = getchar() != 'n')continue;system("cls");system("cls");savedTag = 1; /记录未保存标志/职工信息排序void sortInfo() char s;char str5;int i, j;int cn;WorkInfo tmps;if (numWorks = 0) printf("没有可供排序的记录!n");printf("n按Enter键返回菜单。n");while (s = getchar() != 'n'

49、;)continue;system("cls");return;printf("nnnt n");printf("t 请选择排序方式 |n");printf("t*n");printf("t* 1、按职工号升序 | 2、按职工号降序 *n");printf("t* 3、按姓名升序 | 4、按姓名降序 *n");printf("t* 5、按工资升序 | 6、按工资降序 *n");printf("t*-*n");printf("t

50、* 0、返回菜单 *n");printf("t*n");printf("n左边数字对应操作选择,请选0-6:");for (;) gets(str);while (strlen(str) = 0)gets(str);cn = atoi(str);if (cn < 0 | cn>6)printf("n输入错误,重选0-6:");elsebreak;if (cn = 0) system("cls");printf("正在返回");for (i = 0; i < 4; i+

51、) Sleep(350);printf(".");system("cls");return;system("cls");printf("n排序操作进行中");for (i = 0; i < 2; i+) Sleep(350);printf(".");/进行排序for (i = 0; i < numWorks; i+) for (j = i + 1; j < numWorks; j+) if (cn = 1 && strcmp(recordsi.number, r

52、ecordsj.number)>0) |(cn = 2 && strcmp(recordsi.number, recordsj.number) < 0) |(cn = 3 && strcmp(, ) > 0) |(cn = 4 && strcmp(, ) < 0) |(cn = 5 && recordsi.wager > recordsj.wager) |(cn = 6 && recordsi.wager < recordsj.wager) copyRecord(&recordsi, &tmps);copyRecord(&recordsj, &recordsi);copyRecord(&tmps, &recordsj);for (i = 0; i < 3; i+) Sleep(

温馨提示

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

评论

0/150

提交评论