课程设计(论文)题目名称职工信息管理系统课程名称C语言程序课程设计学生姓名刘丹学号1241302028系、专业信息工程系、计算机科学与技术专业指导教师黄磊2013年6月 6 日目录1 前言 (1)2 需求分析 (1)2.1 课程设计目的 (1)2.2 课程设计任务 (2)2.3 设计环境 (2)2.4 开发语言 (2)3 分析和设计 (3)3.1 模块设计 (4)3.2 系统流程图 (4)3.3 主要模块的流程图 (5)4 具体代码实现 (7)5 课程设计总结 (9)5.1程序运行结果/ 预期运行结果 (9)5.2 课程设计体会 (13)参考文献 (14)致谢 (14)1 前言编写一个程序来处理职工信息管理系统。
通过结构体数组来存放输入的每一位职工的记录(包括工号、姓名、性别、年龄、学历、工资、住址、电话等),然后将其录入的职工信息以文件形式保存。
然后输入名字、工号、学历查询该同学的信息,并且对其进行浏览、查询、修改、删除等基本操作,建立职工信息管理的文件。
2 需求分析1、程序结构合理2、界面比较美观3、最好使用结构、体指针4、输入时有提示,输出美观,整齐职工信息由工号、姓名、性别、年龄、学历、工资、住址、电话等构成。
功能要求:(1)系统以菜单方式工作(2)职工信息录入功能(职工信息用文件保存)——输入(3)职工信息浏览功能——输出(4)查询和排序功能:(至少一种查询方式)——算法(5)按职工号查询(6)按学历查询等(7)职工信息删除、添加功能2.1 课程设计目的学生在教师指导下运用所学课程的知识来研究、解决一些具有一定综合性问题的专业课题。
通过课程设计(论文),将课本上的理论知识和实际有机结合起来,提高学生的分析解决实际问题的能力;加强学生适应实际,实践编程的能力;锻炼使用文献资料及进行科学实验或技术设计的初步能力,为毕业设计(论文)打基础。
2.2 课程设计任务设计一个职工信息管理系统,使之能提供职工信息录入功能、职工信息浏览功能、查询功能:按姓名查询,职工信息包括职工号,姓名,性别,年龄,学历,工资,住址,电话等。
实现菜单设计,使用数据文件保存和修改, 应用结构体和指针等内容。
1、查阅相关文献资料;2、按时完成系统的设计并且能够运行;3、要求程序正确,功能可靠;操作简单,使用方便;4、课程设计交流:认真写课程设计日志,每2天指导老师审查,通过邮件、电话,或者面谈与导师沟通汇报情况。
5、按课程设计(论文)要求,写课程设计论文。
2.3 设计环境(1)WINDOWS 2000/2003/XP/7/Vista系统(2)Visual C++或TC集成开发环境2.4 开发语言C语言3分析设计职工信息管理系统编程的作用是将职工的信息存放在文件中,然后在程序中可以浏览、查询、删除、添加职工的信息,好方便了解职工信息,同时能够及时刷新职工信息。
职工信息管理系统可以按功能进行以下划分,如下图所示:1.菜单选择是职工信息管理的入口,进行的各种操作均需要这里进行选择。
2.信息输入是将职工的信息输入到文件中,包括工号、姓名、性别、年龄、学历、工资、住址、电话等。
3.信息浏览是将已经输入的职工信息的显示出来。
4.信息查询是用来查询职工的信息,查询方式有按工号查询和姓名查询还有按学历查询三种方式。
5.信息删除是删除职工一些信息。
6.信息添加是增加一些职工信息。
3.1 模块设计定义结构体类型struct employee 表示职工信息(包括:工号、姓名、联系电话、性别、工资、学历、年龄、地址),定义一个结构体数组em[N],用来存放N个学生的信息,假设N为3。
如下所示:#define Nstruct employee{ int number;int age;int wage;char name[20];char sex[10];char address[30];char xuelil[20];long int telephone;}em[N];定义函数input(),用来输入若干职工信息存入em数组中。
定义函数save(),用来把结构体数组中的信息写入文件bbb.txt中。
在save 函数中先用写的方式保存到文件bbb.txt,然后以读的方式打开文件bbb,指针变量fp,打开文件bbb失败就退出。
定义函数search(),用来在文件中查找某职工的信息。
定义函数display(),用来显示某职工的信息。
定义函数del(),用来删除某职工的信息。
定义函数add(),用来添加某职工的信息。
3.2 系统流程图系统流程图如下:图3.1系统流程图3.3 主要模块的流程图主函数模块流程图如下:图3.2 主函数流程图1、主函数switch根具体程序如下:main() /*主函数*/{int n;printf("\n");printf(" ******************职工信息管理****************\n");printf("\n");printf(" 1.录入职工信息\n");printf(" 2.浏览职工信息\n");printf(" 3.查询职工信息\n");printf(" 4.删除职工信息\n");printf(" 5.添加职工信息\n");printf(" 6.退出\n");printf("\n");scanf("%d",&n);switch(n){case 1:printf(" 输入职工信息\n");printf("\n");input();main();break;case 2:printf(" 浏览职工信息\n");printf("\n");display(*p);main();break;case 3:printf(" 查询职工信息\n");printf("\n");search();break;case 4:printf(" 删除职工信息\n");printf("\n");del(p);break;case 5:printf(" 添加职工信息\n");printf("\n");add(p);break;case 6:exit(0);break;default :break;}}输入函数模块流程图如下:工号历输入的内容,接着用scanf语句输入相应的内容。
输入完毕后套用保存save[N]将所输入的信息写入指定文件。
具体程序如下:void input() /*录入函数*/{int i;for(i=0;i<N;i++) /*输入*/{printf("请输入职工号:");scanf("%3d",&em[i].number);getchar(); /*输入职工工号*/printf("请输入姓名: ");scanf("%s",em[i].name); /*输入职工姓名*/printf("请输入性别: ");scanf("%s",em[i].sex);getchar(); /*输入职工性别*/printf("请输入年龄: ");scanf("%d",&em[i].age);getchar(); /*输入职工年龄*/printf("请输入学历: ");scanf("%s",em[i].xueli); /*输入职工学历*/printf("请输入工资: ");scanf("%d",&em[i].wage);getchar(); /*输入职工工资*/printf("请输入住址: ");scanf("%s",em[i].address); /*输入职工家庭地址*/printf("请输入电话: ");scanf("%d",&em[i].telephone);getchar(); /*输入职工联系号码*/printf("\n");}printf("\n创建完毕!\n");save(N);}4 具体代码实现#include<stdio.h> /*标准I/Q函数*/#include <string.h>#define N 2struct employee /*定义一个职工信息结构体*/{int numbe; /*职工号*/int age; /*年龄*/int wage; /*工资*/char name[20]; /*姓名*/char sex[10]; /*性别*/char address[30]; /*家庭地址*/char xueli[10]; /*学历*/long int telephone; /*联系电话* /}em[N];void search(); /*查询*/void search_name(); /*按名字查询*/void search_xueli(); /*按学历查询*/void search_number(); /*按工号查询*/void load(); /*装载信息文件*/void display(); /*显示职工信息*/void del(); /*删除职工信息*/void input(); /*录入职工信息*/void add(); /*添加职工信息*/void save(); /*保存信息文件*/int a=N;int *p=&a;main() /*主函数*/{int n;printf("\n");printf(" ******************职工信息管理****************\n");printf("\n");printf(" 1.录入职工信息\n");printf(" 2.浏览职工信息\n");printf(" 3.查询职工信息\n");printf(" 4.删除职工信息\n");printf(" 5.添加职工信息\n");printf(" 6.退出\n");printf("\n");scanf("%d",&n);switch(n){case 1:printf(" 输入职工信息\n");printf("\n");input();main();break;case 2:printf(" 浏览职工信息\n");printf("\n");display(*p);main();break;case 3:printf(" 查询职工信息\n");printf("\n");search();break;case 4:printf(" 删除职工信息\n");printf("\n");del(p);break;case 5:printf(" 添加职工信息\n");printf("\n");add(p);break;case 6:exit(0);break;default :break;}void input() /*录入函数*/{int i;for(i=0;i<N;i++) /*输入*/{printf("请输入职工号:");scanf("%3d",&em[i].number);getchar(); /*输入职工工号*/printf("请输入姓名: ");scanf("%s",em[i].name); /*输入职工姓名*/printf("请输入性别: ");scanf("%s",em[i].sex);getchar(); /*输入职工性别*/printf("请输入年龄: ");scanf("%d",&em[i].age);getchar(); /*输入职工年龄*/printf("请输入学历: ");scanf("%s",em[i].xueli); /*输入职工学历*/printf("请输入工资: ");scanf("%d",&em[i].wage);getchar(); /*输入职工工资*/printf("请输入住址: ");scanf("%s",em[i].address); /*输入职工家庭地址*/printf("请输入电话: ");scanf("%d",&em[i].telephone);getchar(); /*输入职工联系号码printf("\n");}printf("\n创建完毕!\n");save(N);}void save(int m) /*保存文件函数*/{int i;FILE*fp; /*指向文件指针*/if(!(fp=fopen("c://bbb.txt","w"))) /*写方式打开文件bbb,指针变量fp指向该文件*/{printf("打开失败");exit(0); /正常退出程序/}for(i=0;i<m;i++)fprintf(fp,"%d %8s %s %d %8s %d %s %d\n",em[i].number,e m[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].address, em[i].telephone);fclose(fp); /*fp是用fope n函数打开文件时所带回的指针*/void load(int b) /*导入函数*/{int i;FILE*fp;if(!(fp=fopen("c://bbb.txt","r"))) /*读方式打开文件bbb,指针变量fp指向该文件*/{printf("打开失败");exit(0);}elsefor(i=0;i<b;i++)fscanf(fp,"%3d %8s %s %2d %8s %4d %s %8d\n",&em[i].num ber,em[i].name,em[i].sex,&em[i].age,em[i].xueli,&em[i].wage,em[i]. address,&em[i].telephone);fclose(fp); /*关闭文件*/}void display(int a) /*浏览函数*/{int i,b=a;load(b);printf("\n职工号\t 姓名\t性别\t年龄\t 学历\t 工资\t 住址\t 电话\n");for(i=0;i<a;i++)printf("%d\t%8s\t%s\t%d\t%8s %d\t%s\t%d\n",em[i].nu mber,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].a ddress,em[i].telephone);printf("\n");}void search(){int t;printf("\n按职工号查询按1\n按姓名查询请按2");printf("\n按学历查询请按3\n返回主菜单请按4\n");scanf("%d",&t);switch(t){case 1:printf("\n按职工号查询\n");search_number();break;case 2:printf("\n按姓名查询\n");search_name();break;case 3:printf("\n按学历查询\n");search_xueli();break;case 4:main();break;default :printf("输入错误,请重新输入!\n");search();break;}}void search_number() /*按工号查找职工信息*/ {int i,number;load(*p);printf("\n请输入要查询的职工号:");scanf("%d",&number);for(i=0;i<*p;i++)if(number==em[i].number){printf("\n该职工信息如下:\n");printf("\n职工号\t 姓名\t性别\t年龄\t 学历\t 工资\t 住址\t电话\n");printf("\n%d\t%8s\t%s\t %d\t%8s %d\t%s\t%d\n",em[i] .number,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[ i].address,em[i].telephone);printf("\n");break;}if(i==*p)printf("\n查无此人\n");search();}void search_name() /*按姓名查找职工信息*/{int i;char name[20];load(*p);printf("\n请输入要查询的姓名:");scanf("%s",name);for(i=0;i<*p;i++)if(!strcmp(em[i].name,name)){printf("\n该职工信息如下:\n");printf("\n职工号\t 姓名\t性别\t年龄\t 学历\t 工资\t 住址\t电话\n");printf("\n%d\t%8s\t%s\t %d\t%8s %d\t%s\t%d\n",em[i] .number,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[ i].address,em[i].telephone);printf("\n");break;}if(i==*p)printf("\n查无此人\n");search();}void search_xueli() /*按学历查找职工信息*/{int i,k=0;char xueli[20];load(*p);printf("\n请输入要查询的学历:");scanf("%s",xueli);for(i=0;i<*p;i++)if(!strcmp(em[i].xueli,xueli)){printf("\n职工号\t 姓名\t性别\t年龄\t 学历\t 工资\t 住址\t电话\n");printf("%d\t%8s\t%s\t %d\t%8s %d\t%s\t%d\n",em[i].n umber,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i]. address,em[i].telephone);}for(i=0;i<*p;i++){if(!strcmp(em[i].xueli,xueli))break;else k++;}if(k==*p)printf("\n查无此人\n");search();}void del(int *b) /*删除函数*/{int i,t,j,m;int a=*b;char name[20];printf("\n所有职工信息:\n");display(a);printf("\n请输入要删除职工的名字:");scanf("%s",name);for(i=0;i<a;i++){if(!strcmp(em[i].name,name)){printf("\n确认删除请按1\n取消请按2\n");scanf("%d",&t);if(t==1){for(j=i;j<a-1;j++){em[j].age=em[j+1].age;em[j].wage=em[j+1].wage;em[j].number=em[j+1].number;em[j].telephone=em[j+1].telephone;strcpy(em[j].xueli,em[j+1].xueli);strcpy(em[j].name,em[j+1].name);strcpy(em[j].address,em[j+1].address);strcpy(em[j].sex,em[j+1].sex);}a--;save(j);break;}if(t==2)break;}}if(i==a)printf("\n输入错误,无此人\n");*b=a;printf("\n继续删除请按1\n浏览信息请按2\n返回主菜单请按3\n"); scanf("%d",&m);switch(m){case 1:del(p);break;case 2:display(*b);main();break;case 3:main();break;default:break;}}void add(int *a) /*添加函数*/ {int i,n,m;FILE*fp;if(!(fp=fopen("c://bbb.txt","a"))){printf("打开失败");exit(0);}printf("\n请输入想添加的人数:\n");scanf("%d",&n);for(i=*a;i<n+(*a);i++){printf("请输入职工号:");scanf("%d",&em[i].number);printf("请输入姓名: ");scanf("%s",em[i].name);printf("请输入性别: ");scanf("%s",em[i].sex);printf("请输入年龄: ");scanf("%d",&em[i].age);printf("请输入学历: ");scanf("%s",em[i].xueli);printf("请输入工资: ");scanf("%d",&em[i].wage);printf("请输入住址: ");scanf("%s",em[i].address);printf("请输入电话: ");scanf("%d",&em[i].telephone);printf("\n");}printf("\n添加完毕\n");for(i=*a;i<n+(*a);i++)fprintf(fp,"%d %8s %s %d %8s %d %s %d\n",em[i].number,e m[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].address, em[i].telephone);fclose(fp);*a=*a+n;printf("\n浏览新信息请按1\n返回主菜单请按2\n");scanf("%d",&m);switch(m){case 1:display(*a);main();break;case 2:main();break;default:break;}}5 课程设计总结5.1 程序运行结果/ 预期运行结果运行与测试结果如下:1.运行程序进入职工信息管理系统的主菜单。