简简单单,包含代码注释:
#include<stdio.h> //输入输出函数 #include<stdlib.h> //动态开辟一个内存的头文件 #include<string.h> //字符串函数 #define LEN 1000 /* 学工和姓名最大字符数,实际请更改*/ #define N 1000 /* 最大职工人数,实际请更改*/ #define M sizeof(struct works) //M的值为struct works的长度 #define R 3 //为了方便所以只输入三个信息来测试代码 int n = 0, t = 1;/* n代表当前记录的职工人数,t用于控制整个程序的执行机器退出*/ //使用结构体函数来对职工信息进行保存 struct student { char StuID[LEN]; //职工工号 char Stuname[LEN];//职工姓名 char StuAge;//职工年龄 char Stusex;//职工性别 }stu[N];//结构体变量 //声明函数 void menu();//主菜单函数 void help();//系统帮助及其说明 void increase();//增加职工信息 void seek();//查找职工信息 void de();//删除职工信息 void save();//保存文件 void present();//显示当前信息 void modify();//修改职工信息 void sort();//对职工工号进行排序 void exit();//退出函数 int main() { int num;//num为菜单选项 while(t)//t是全局变量,用exit函数来控制循环是否继续 //exit函数的作用为在main函数末尾用于退出应用程序,删除进程使用的内存空间 { menu();//输出主菜单界面 printf("您好,请输入菜单编号:"); scanf("%d",&num); switch(num) { case 1: help(); break; case 2: increase(); break; case 3: seek(); break; case 4: de(); break; case 5: save(); break; case 6: present(); break; case 7: modify(); break; case 8: sort() ; break; case 9: exit(); break; default:printf("输入有误,请重新输入!"); } } system("pause"); //pause的作用为对程序进行暂停 return 0; } //菜单函数的定义 void menu() { printf("********************系统功能菜单*********************\n"); printf("---------------------- --------------------------\n"); printf("*****************************************************\n"); printf("** 1.系统帮助及说明 **\n"); printf("*****************************************************\n"); printf("** 2.增加当前信息 * * 3.查询职工信息 **\n"); printf("*****************************************************\n"); printf("** 4.按工号删除信息 * * 5.保存职工信息 **\n"); printf("*****************************************************\n"); printf("** 6.显示当前信息 * * 7.修改职工信息 **\n"); printf("** 8.职工工号排序 * * 9.退出系统 **\n"); printf("*****************************************************\n"); printf("---------------------- --------------------------\n"); } //根据年龄和工号排序 void sort(){ int i, j,num; student temp; printf("*****************************\n"); printf("**-------1.按工号排序------**\n"); printf("**-------2.按年龄排序------**\n"); printf("**-------3.退出该菜单------**\n"); printf("*****************************\n"); while(1) { printf("请输入子菜单:"); scanf("%d",&num); switch (num) { case 1://冒泡排序 for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++) { if (stu[j].StuID>stu[j + 1].StuID) { temp = stu[j+1]; stu[j+1]=stu[j]; stu[j]=temp; } } } printf("排序已完成"); present(); break; case 2: for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++) { if (stu[j].StuAge>stu[j + 1].StuAge) { temp = stu[j+1]; stu[j+1]=stu[j]; stu[j]=temp; } } } printf("排序已完成"); present(); break; case 3:return; } } } //系统帮助及说明的函数的定义 void help() { printf("\n这为职工信息管理系统,为了便于您的使用请仔细了解一下帮助及说明:\n"); printf("\n 系统帮助及说明: \n "); printf("\n 1、请根据提示进行操作!\n"); printf("\n 2、初次使用请先选择增加职工信息!\n"); printf("\n 3、修改或增加职工信息后一定要保存!\n"); printf("\n 4、若数据有错误,请先修改完成后再保存!\n"); printf("\n 5、若您之前使用过,下次进入系统请您先刷新职工信息!\n"); printf("\n 6、在添加职工时,用两个字符代表不同的性别,如男用‘M’代替,女用‘W’代替!\n"); printf("\n 7、保存或者刷新时,输入的文件名后缀请使用.txt。如:stu.txt,系统会在源程序\n"); printf("\n “职工管理系统.exe”的相同目录建立一个.txt文件来保存职工信息,您可以查看\n"); printf("\n 该文件,但非专业人员不要轻易改动,否则会造成刷新数据异常或刷新失败!\n"); printf("\n 8、职工信息包括:姓名、工号、性别、年龄\n"); system("pause"); } //定义增加职工信息的函数 void increase() { int i=n,j,flag,m=0;//i代表增加职工信息过程中任意时刻的职工人数 printf("\n请输入待增加的职工人数:\n"); scanf("%d",&m); if(m>0){ do{ flag=1; while(flag) { flag=0; printf("请输入第%d位职工的工号:\n",i+1);//第几位职工从1开始计数,而stu[]从零开始,所以为i+1 scanf("%s",stu[i].StuID); //判断工号是否重复 for(j=0;j<i;j++){ if(strcmp(stu[i].StuID,stu[j].StuID)==0){ printf("该工号已经存在,请您重新输入!\n"); flag=1; break; } } } printf("请输入第%d位职工姓名:\n",i+1); scanf("%s",stu[i].Stuname); printf("请输入第%d位职工年龄:\n",i+1); scanf("%d",&stu[i].StuAge); getchar();//从键盘接受一个字符 printf("请输入第%d位职工性别:\n",i+1); scanf("%c",&stu[i].Stusex); i++; }while(i<n+m);//若所增加的职工人数未达到所设置的最大人数,则需继续增加 } n+=m;// 当添加完成,系统人数n的值也要增加 printf("恭喜您已添加完成\n"); system("pause"); } //定义查询职工信息的函数 void seek() { int i,num,flag; char s1[LEN+1]; printf("*****************************\n"); printf("**-------1.按工号查询------**\n"); printf("**-------2.按姓名查询------**\n"); printf("**-------3.退出该菜单------**\n"); printf("*****************************\n"); while(1) //在使用while循环中与switch,case,break一起使用 { flag=0; printf("请输入子菜单:"); scanf("%d",&num); switch(num) { case 1: printf("请输入需要查找职工的工号:\n"); scanf("%s",s1); for(i=0;i<n;i++) { if(strcmp(stu[i].StuID,s1)==0) { flag=1; printf("工号\t\t姓名\t\t性别\t\t年龄\t\n"); printf("%s\t\t%s\t\t%c\t\t%d\t\n",stu[i].StuID,stu[i].Stuname,stu[i].Stusex,stu[i].StuAge); } }break; case 2: printf("请输入您要查找的职工姓名:\n"); scanf("%s",s1); for(i=0;i<n;i++) { if(strcmp(stu[i].Stuname,s1)==0) { flag=1; printf("工号\t\t姓名\t\t性别\t\t年龄\t\n"); printf("%s\t\t%s\t\t%c\t\t%d\t\n",stu[i].StuID,stu[i].Stuname,stu[i].Stusex,stu[i].StuAge); } }break; case 3: return; default: printf("请在1--3之间输入\n"); } if(flag==0) printf("找不到该职工!\n请重新输入!"); } } //定义删除职工信息的函数 void de() { int i,j,flag; char s1[LEN]; printf("请输入需要删除的职工工号:\n"); scanf("%s",s1); flag=0; for(i=0;i<n;i++) { if(strcmp(s1,stu[i].StuID)==0) { flag=1; for(j=i;j<n-1;j++) { stu[j]=stu[j+1];//把后面的职工都往前移1位 } } if(flag==1) break;//表示找到了需要删除的职工并结束循环 } if(0==flag) { printf("该工号不存在\n"); } if(1==flag) { printf("恭喜您已删除成功\n"); n--; } system("pause"); } //定义保存职工信息的函数 void save() { int i; FILE *fp; char filename[LEN+1]; printf("请您输入您所要保存的文件名:\n"); scanf("%s",filename); if((fp=fopen(filename,"w"))==NULL) { printf("打开文件失败\n"); exit(0); } for(i=0;i<n;i++) if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) printf("保存失败\n"); printf("恭喜您已保存成功\n"); fclose(fp); system("pause"); } //定义显示当前信息的函数 void present() { int i; if(n==0) { printf("您好,当前没有职工信息,请您先增加职工信息或者刷新后重试!\n"); } else { printf("现在共有%d名职工:\n",n); printf("工号\t\t姓名\t\t性别\t\t年龄\t\n"); for(i=0;i<n;i++) { printf("%s\t\t%s\t\t%c\t\t%d\t\n",stu[i].StuID,stu[i].Stuname,stu[i].Stusex,stu[i].StuAge); } } system("pause"); } //定义对职工工号大小和姓名进行排序的函数 //定义修改职工信息的函数 void modify() { int i,flag; char ID[LEN],name[LEN],sex; int age; float score; printf("请您输入要修改的职工姓名:\n"); getchar(); gets(name); while(1) { flag=0; for(i=0;i<n;i++) { if(strcmp(name,stu[i].Stuname)==0) { flag=1; int num;//switch函数的子菜单 printf("***************************************************\n"); printf("*----1.修改工号-------- - -----2.修改性别-------*\n"); printf("*----3.修改年龄----*\n"); printf("*-------------------4.退出本菜单------------------*\n"); printf("***************************************************\n\n"); printf("请输入子菜单:"); scanf("%d",&num); switch(num) { case 1: printf("请您输入新的工号:\n"); getchar(); gets(ID); strcpy(stu[i].StuID,ID);break; case 2: getchar(); printf("请您输入新的性别:\n"); scanf("%c",&sex); stu[i].Stusex=sex;break; case 3: printf("请您输入新的年龄:\n"); scanf("%d",&age); stu[i].StuAge=age;break; case 4: return;break; default: printf("请您在1~4之间选择!\n"); } if(num>0&&num<4) printf("修改成功,切记保存\n"); break;//结束循环 } } if(flag==0) { printf("没有找到该名职工,请您重新输入要修改的职工信息的姓名:\n"); gets(name); } } system("pause"); } //定义退出系统的函数 void exit() { int h;// h为整形 printf("即将退出,确认请按0,取消请按1\n"); scanf("%d",&h); if(h==1) { t=0;//t是main函数中while函数是否继续执行的控制条件,是一个全局变量,程序开头已赋了初值 printf("恭喜您已成功退出,感谢您本次的使用\n"); } if(h==0) { printf("退出取消\n"); system("pause"); } }