程序基本写完,请高手帮修改:C语言
三、设计任务描述: 员工档案管理系统是对某单位员工的一些基本信息,如姓名、工号、性别、出身年月、籍贯、学历、职称等进行管理。主要包括信息录入、显示、修改、删除和排序等功能。 |
四、设计要求: 1、本程序要求通过文件完成所有的操作,开始运行程序时将文件读入结构体数组或链表,退出程序时再将结构体数组或链表内容全部写入文件保存; 2、进入程序时,先以菜单形式显示所有命令,然后用户通过菜单项选择操作;例如: 1 插入员工信息 2 查找员工信息 3 修改员工信息 4 删除员工信息 5 显示所有员工信息 6 员工信息排序 7 退出系统 请选择[1/2/3/4/5/6/7]: 3、在输入一条记录后,即显示提示信息,提示用户是否要求继续输入下一条记录,若回答“y”(大小写通用),则继续,否则退出; 4、查找记录时,可按姓名、工号、性别、学历、职称等多种形式进行; 5、在修改员工记录时,对每项数据先显示,然后询问是否修改,若回答“y”(大小写通用),则输入新值,否则不改; 6、删除记录时,先显示要删除的记录,并询问是否删除,若回答“y”(大小写通用),则删除,否则放弃删除; 7、可按员工姓名、学历或职称等进行排序; 8、显示数据时,若一屏显示不下,可以设置分屏显示; 9、采用模块化编程。系统的各项功能分别用函数编写,并通过主函数调用实现其功能; 10、界面尽可能友好、直观、易操作。应用程序运行后,先显示一个菜单,然后用户根据需要选择相应的操作项目。进入每个操作后,根据程序的提示输入相应的信息;要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。 |
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<math.h>
#define N 100
struct stock /*员工档案信息*/
{
char name[20]; /*姓名*/
char num[8]; /*工号*/
char gender[8]; /*性别*/
char birth[8]; /*出生年月*/
char native[40]; /*籍贯*/
char edu[8]; /*学历*/
char title[8]; /*职称*/
}staff[N],c;
int n;
void insert();
void find();
void mod();
void del();
void show();
void sort();
void main() /*主函数*/
{
FILE *fp;
int i;
char a;
printf("\t\t\t* * * * * * * * * * * * * * * *\n\n");
printf("\t\t\t* 欢迎进入员工档案管理系统 *\n\n");
printf("\t\t\t* * * * * * * * * * * * * * * *\n\n");
printf("\n\t\t\t设计者:自动化122班 柴玮\n\n");
printf("\t\t\t设计时间:2013年6月\n\n");
printf("\t\t\t请输入回车进入主界面\n\n\n");
getch();
if((fp=fopen("test","rb+"))==NULL)
{
printf("Can not open this file\n");
exit(1);
}
fread(&n,sizeof(struct stock),1,fp);
fread(&staff,sizeof(struct stock),n,fp);
do{
system("cls"); /*清屏*/
printf("\t\t\t* * * * * * * * * * * *\n\n");
printf("\t\t\t* 员工档案管理系统 *\n\n");
printf("\t\t\t* * * * * * * * * * * *\n\n");
printf("\n\t\t\t1.插入员工信息");
printf("\n\t\t\t2.查找员工信息");
printf("\n\t\t\t3.修改员工信息");
printf("\n\t\t\t4.删除员工信息");
printf("\n\t\t\t5.显示所有员工信息");
printf("\n\t\t\t6.员工信息排序");
printf("\n\t\t\t7.退出系统");
printf("\n\n\n\t\t请输入序号:1/2/3/4/5/6/7:");
a=getch();
switch(a)
{
case '1': insert();break;
case '2': find();break;
case '3': mod();break;
case '4': del();break;
case '5': show();break;
case '6': sort();break;
case '7': exit(0);
default: break;
}
}while(8);
if(fwrite(&n,sizeof(struct stock),1,fp)!=1)
printf("file write error\n");
for(i=0;i<n;i++)
if(fwrite(&staff[i],sizeof(struct stock),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
void insert() /*插入员工信息*/
{
char a='y';
while(a=='Y'||a=='y')
{
n++;
system("cls"); /*清屏*/
printf("请输入员工姓名:");
scanf("%s",staff[n].name);
printf("请输入员工工号:");
scanf("%s",staff[n].num);
printf("请输入员工性别:");
scanf("%s",staff[n].gender);
printf("请输入员工出生年月:");
scanf("%s",staff[n].birth);
printf("请输入员工籍贯:");
scanf("%s",staff[n].native);
printf("请输入员工学历:");
scanf("%s",staff[n].edu);
printf("请输入员工职称:");
scanf("%s",staff[n].title);
printf("是否继续输入下一条‘Y’or‘N’:");
a=getch();
}
}
void find() /*查找员工信息*/
{
int i,j,m[N];
j=0;
flushall();
system("cls"); /*清屏*/
printf("请输入你要查询的姓名/工号/性别/学历/职称");
gets(c.name);
printf(" 姓名 工号 性别 出生年月 籍贯 学历 职称\n");
for(i=0;i<N;i++)
{
if((strcmp(c.name,staff[i].name))==0) {m[j++]=i;continue;}
if((strcmp(c.name,staff[i].num))==0) {m[j++]=i;continue;}
if((strcmp(c.name,staff[i].gender))==0) {m[j++]=i;continue;}
if((strcmp(c.name,staff[i].edu))==0) {m[j++]=i;continue;}
if((strcmp(c.name,staff[i].title))==0) {m[j++]=i;continue;}
}
if(j>0)
{
for(i=0;i<j;i++)
printf(" %-15s %-4s\t %s %-8ls %-20s %-6ls %s\n",staff[m[i]].name,
staff[m[i]].num,staff[m[i]].gender,staff[m[i]].birth,
staff[m[i]].native,staff[m[i]].edu,staff[m[i]].title);
getch();
}
if(j==0)
{
printf("找不到要查找的记录!\n");
printf("按回车键返回");
getch();
}
}
void mod() /*修改员工信息*/
{
int i;
char a,b;
a='y';
system("cls"); /*清屏*/
while(a=='Y'||a=='y')
{
printf("\n请输入要修改记录的姓名:");
flushall();
gets(c.name);
for(i=0;i<n;i++)
{
if((strcmp(c.name,staff[i].name))==0) /*修改*/
{
system("cls"); /*清屏*/
printf("是否修改姓名:'Y'or'N'");
b=getch();
if(b=='Y'||b=='y')
{
printf("\n请输入修改后的姓名:");
scanf("%s",staff[i].name);
}
system("cls"); /*清屏*/
printf("是否修改工号:'Y'or'N'");
b=getch();
if(b=='Y'||b=='y')
{
printf("\n请输入修改后的工号:");
scanf("%s",staff[i].num);
}
system("cls"); /*清屏*/
printf("是否修改性别:'Y'or'N'");
b=getch();
if(b=='Y'||b=='y')
{
printf("\n请输入修改后的性别:");
scanf("%s",&staff[i].gender);
}
system("cls"); /*清屏*/
printf("是否修改出生年月:'Y'or'N'");
b=getch();
if(b=='Y'||b=='y')
{
printf("\n请输入修改后的出生年月:");
scanf("%s",staff[i].birth);
}
system("cls"); /*清屏*/
printf("是否修改籍贯:'Y'or'N'");
b=getch();
if(b=='Y'||b=='y')
{
printf("\n请输入修改后的籍贯:");
scanf("%s",staff[i].native);
}
system("cls"); /*清屏*/
printf("是否修改学历:'Y'or'N'");
b=getch();
if(b=='Y'||b=='y')
{
printf("\n请输入修改后的学历:");
scanf("%s",staff[i].edu);
}
system("cls"); /*清屏*/
printf("是否修改职称:'Y'or'N'");
b=getch();
if(b=='Y'||b=='y')
{
printf("\n请输入修改后的职称:");
scanf("%s",staff[i].title);
}
break;
}
if(i>=n)
{
printf("找不到要修改的记录!\n");
printf("按回车键返回主菜单:");
getch();
}
}
system("cls"); /*清屏*/
printf("是否继续修改:'y'or'n'");
a=getch();
}
}
void del() /*删除员工信息*/
{
int i,j;
char b='y';
while(b=='Y'||b=='y')
{
system("cls"); /*清屏*/
printf("\n请输入要删除的员工姓名:");
gets(c.name);
for(i=0;i<n;i++)
{
if((strcmp(c.name,staff[i].name))==0) /*删除记录*/
{
for(j=i;j<n-1;j++)
staff[j]=staff[j+1];
n--;
};
if(i>=n)
{
printf("找不到要删除的记录!\n");
printf("按回车键返回:");
getch();
}
}
system("cls"); /*清屏*/
printf("是否继续删除下一个:是y/否n");
flushall();
b=getch();
}
}
void show() /*显示所有员工信息*/
{
int i;
flushall();
system("cls"); /*清屏*/
printf("姓名 工号 性别 出生年月 籍贯 学历 职称\n");
for(i=0;i<=n;i++)
{
printf("%s %s %s %s %s %s %s\n",staff[i].name,staff[i].num,staff[i].gender,
staff[i].birth,staff[i].native,staff[i].edu,staff[i].title);
}
printf("按回车键返回");
getch();
}
void sort() /*员工信息排序*/
{
int i,j;
char a='y',b;
flushall();
while(a=='Y'||a=='y')
{
system("cls"); /*清屏*/
printf("请选择排序方式:1.姓名/2.学历/3.职称");
b=getch();
for(i=0;i<n;i++)
for(j=0;j<=n;j++)
switch(b)
{
case '1':if((strcmp(staff[i].name,staff[j].name))<0) { c=staff[i];
staff[i]=staff[j];staff[j]=c;}break;
case '2':if((strcmp(staff[i].edu,staff[j].edu))<0) { c=staff[i];
staff[i]=staff[j];staff[j]=c;}break;
case '3':if((strcmp(staff[i].title,staff[j].title))<0) { c=staff[i];
staff[i]=staff[j];staff[j]=c;}break;
}
show();
system("cls"); /*清屏*/
printf("是否继续排序:是y/否n");
a=getch();
}
}
程序进行优化?
是啊
好长时间没有搞过C,不过优化这种事,岂是发贴就能搞定的,付费请高人吧
我这程序基本没问题!就是无法存入数据!我文件这块比较弱!望指点!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define N 100
struct stock /*员工档案信息*/
{
char name[8]; /*姓名*/
char num[8]; /*工号*/
char gender[8]; /*性别*/
char birth[8]; /*出生年月*/
char native[16]; /*籍贯*/
char edu[8]; /*学历*/
char title[8]; /*职称*/
}staff[N];
int n;
void insert();
void find();
void mod();
void del();
void show();
void sort();
void main() /*主函数*/
{
FILE *fp;
char a;
printf("\t\t\t* * * * * * * * * * * * * * * *\n\n");
printf("\t\t\t* 欢迎进入员工档案管理系统 *\n\n");
printf("\t\t\t* * * * * * * * * * * * * * * *\n\n");
printf("\n\t\t\t设计者:自动化122班 柴玮\n\n");
printf("\t\t\t设计时间:2013年6月\n\n");
printf("\t\t\t请输入回车进入主界面\n\n\n");
getch();
if((fp=fopen("test","rb"))==NULL)
{
printf("Can not open this file\n");
exit(1);
}
if(fread(&n,sizeof(int),1,fp)!=1) n=0;
fread(staff,sizeof(struct stock),n,fp);
fclose(fp);
do{
system("cls"); /*清屏*/
printf("%d",n);
printf("\t\t\t* * * * * * * * * * * *\n\n");
printf("\t\t\t* 员工档案管理系统 *\n\n");
printf("\t\t\t* * * * * * * * * * * *\n\n");
printf("\n\t\t\t1.插入员工信息");
printf("\n\t\t\t2.查找员工信息");
printf("\n\t\t\t3.修改员工信息");
printf("\n\t\t\t4.删除员工信息");
printf("\n\t\t\t5.显示所有员工信息");
printf("\n\t\t\t6.员工信息排序");
printf("\n\t\t\t7.退出系统");
printf("\n\n\n\t\t请输入序号:1/2/3/4/5/6/7:");
a=getch();
switch(a)
{
case '1': insert();break;
case '2': find();break;
case '3': mod();break;
case '4': del();break;
case '5': show();break;
case '6': sort();break;
case '7':{
if((fp=fopen("test","wb"))==NULL)
{
printf("Can not open this file\n");
exit(1);
};
if(fwrite(&n,sizeof(int),1,fp)!=1)
printf("file write error\n");
if(fwrite(staff,sizeof(struct stock),n,fp)!=(unsigned int)n)
printf("file write error\n");
fclose(fp);
exit(0);
}
default: break;
}
}while(8);
}
void insert() /*插入员工信息*/
{
char a='y';
flushall();
while(a=='Y'||a=='y')
{
system("cls"); /*清屏*/
printf("请输入员工姓名:");
scanf("%s",staff[n].name);
printf("请输入员工工号:");
scanf("%s",staff[n].num);
printf("请输入员工性别:");
scanf("%s",staff[n].gender);
printf("请输入员工出生年月:");
scanf("%s",staff[n].birth);
printf("请输入员工籍贯:");
scanf("%s",staff[n].native);
printf("请输入员工学历:");
scanf("%s",staff[n].edu);
printf("请输入员工职称:");
scanf("%s",staff[n].title);
n++;
printf("是否继续输入下一条‘Y’or‘N’:");
a=getch();
}
}
void find() /*查找员工信息*/
{
int i,j=0,m[N];
struct stock c;
flushall();
system("cls"); /*清屏*/
printf("请输入你要查询的姓名/工号/性别/学历/职称");
gets(c.name);
printf(" 姓名 工号 性别 出生年月 籍贯 学历 职称\n");
for(i=0;i<n;i++)
{
if((strcmp(c.name,staff[i].name))==0) {m[j++]=i;continue;}
if((strcmp(c.name,staff[i].num))==0) {m[j++]=i;continue;}
if((strcmp(c.name,staff[i].gender))==0) {m[j++]=i;continue;}
if((strcmp(c.name,staff[i].edu))==0) {m[j++]=i;continue;}
if((strcmp(c.name,staff[i].title))==0) {m[j++]=i;continue;}
}
if(j>0)
{
for(i=0;i<j;i++)
printf("%8s %8s %8s %8s %16s %8s %8s\n",staff[m[i]].name,staff[m[i]].num,staff[m[i]].gender,
staff[m[i]].birth,staff[m[i]].native,staff[m[i]].edu,staff[m[i]].title);
}
if(j==0)
{
printf("找不到要查找的记录!\n");
printf("按回车键返回");
getch();
}
printf("请按回车键返回");
getch();
}
void mod() /*修改员工信息*/
{
int i,m[20],k,j;
char a='y',b,c[20];
system("cls"); /*清屏*/
while(a=='Y'||a=='y')
{
k=0;
printf("\n请输入要修改记录的姓名或工号:");
flushall();
gets(c);
for(i=0;i<n;i++)
{
if((strcmp(c,staff[i].name))==0||(strcmp(c,staff[i].num))==0) /*修改*/
{
m[k++]=i;
}
}
if(k>0)
{
printf("编号 姓名 工号 性别 出生年月 籍贯 学历 职称\n");
for(i=0;i<k;i++)
{
printf("%d %8s %8s %8s %8s %16s %8s %8s\n",i,staff[m[i]].name,staff[m[i]].num,staff[m[i]].gender,
staff[m[i]].birth,staff[m[i]].native,staff[m[i]].edu,staff[m[i]].title);
}
printf("请输入你要修改的编号:(若退出请按%d)",k);
flushall();
scanf("%d",&j);
system("cls"); /*清屏*/
if(j<k)
{
i=m[j];
printf("当前姓名为:%s\n",staff[i].name);
printf("是否修改姓名:'Y'or'N'");
b=getch();
if(b=='Y'||b=='y')
{
printf("\n请输入修改后的姓名:");
scanf("%s",staff[i].name);
}
system("cls"); /*清屏*/
printf("当前工号为:%s\n",staff[i].num);
printf("是否修改工号:'Y'or'N'");
b=getch();
if(b=='Y'||b=='y')
{
printf("\n请输入修改后的工号:");
scanf("%s",staff[i].num);
}
system("cls"); /*清屏*/
printf("当前性别为:%s\n",staff[i].gender);
printf("是否修改性别:'Y'or'N'");
b=getch();
if(b=='Y'||b=='y')
{
printf("\n请输入修改后的性别:");
scanf("%s",&staff[i].gender);
}
system("cls"); /*清屏*/
printf("当前出身年月为:%s\n",staff[i].birth);
printf("是否修改出生年月:'Y'or'N'");
b=getch();
if(b=='Y'||b=='y')
{
printf("\n请输入修改后的出生年月:");
scanf("%s",staff[i].birth);
}
system("cls"); /*清屏*/
printf("当前籍贯为:%s\n",staff[i].native);
printf("是否修改籍贯:'Y'or'N'");
b=getch();
if(b=='Y'||b=='y')
{
printf("\n请输入修改后的籍贯:");
scanf("%s",staff[i].native);
}
system("cls"); /*清屏*/
printf("当前学历为:%s\n",staff[i].edu);
printf("是否修改学历:'Y'or'N'");
b=getch();
if(b=='Y'||b=='y')
{
printf("\n请输入修改后的学历:");
scanf("%s",staff[i].edu);
}
system("cls"); /*清屏*/
printf("当前职称为:%s\n",staff[i].title);
printf("是否修改职称:'Y'or'N'");
b=getch();
if(b=='Y'||b=='y')
{
printf("\n请输入修改后的职称:");
scanf("%s",staff[i].title);
}
system("cls"); /*清屏*/
printf("······修改信息成功·····\n");
}
printf("···是否继续修改其它:'y'or'n'");
a=getch();
}
else
{
printf("找不到要修改的记录!\n");
printf("是否继续修改:'y'or'n'");
a=getch();
}
}
}
void del() /*删除员工信息*/
{
int i,j,m[20],k;
char b='y',c[20],d;
while(b=='Y'||b=='y')
{
k=0;
system("cls"); /*清屏*/
printf("\n请输入要删除的员工姓名或工号:");
gets(c);
for(i=0;i<n;i++)
{
if((strcmp(c,staff[i].name))==0||(strcmp(c,staff[i].num))==0) /*删除记录*/
m[k++]=i;
}
if(k>0)
{
printf("编号 姓名 工号 性别 出生年月 籍贯 学历 职称\n");
for(i=0;i<k;i++)
{
printf("%d %8s %8s %8s %8s %16s %8s %8s\n",i,staff[m[i]].name,staff[m[i]].num,staff[m[i]].gender,
staff[m[i]].birth,staff[m[i]].native,staff[m[i]].edu,staff[m[i]].title);
}
printf("请输入你要删除的编号:(若退出请按%d)",k);
scanf("%d",&d);
system("cls"); /*清屏*/
if(d<k)
{
for(j=m[d];j<n-1;j++)
staff[j]=staff[j+1];
n--;
printf("·····删除信息成功·····\n");
}
printf("···是否继续删除下一个:是y/否n");
flushall();
b=getch();
}
else
{
printf("找不到要删除的记录!\n");
printf("是否继续删除下一个:是y/否n");
flushall();
b=getch();
}
}
}
void show() /*显示所有员工信息*/
{
int i;
flushall();
system("cls"); /*清屏*/
printf(" 姓名 工号 性别 出生年月 籍贯 学历 职称\n");
for(i=0;i<n;i++)
{
printf("%8s %8s %8s %8s %16s %8s %8s\n",staff[i].name,staff[i].num,staff[i].gender,
staff[i].birth,staff[i].native,staff[i].edu,staff[i].title);
}
printf("按回车键返回");
getch();
}
void sort() /*员工信息排序*/
{
int i,j;
char a='y',b;
struct stock c;
flushall();
while(a=='Y'||a=='y')
{
system("cls"); /*清屏*/
printf("请选择排序方式:1.姓名/2.工号/3.学历/4.职称");
b=getch();
for(i=0;i<n-1;i++)
for(j=0;j<n;j++)
switch(b)
{
case '1':if((strcmp(staff[i].name,staff[j].name))<0) { c=staff[i];
staff[i]=staff[j];staff[j]=c;}break;
case '2':if((strcmp(staff[i].num,staff[j].num))<0) { c=staff[i];
staff[i]=staff[j];staff[j]=c;}break;
case '3':if((strcmp(staff[i].edu,staff[j].edu))<0) { c=staff[i];
staff[i]=staff[j];staff[j]=c;}break;
case '4':if((strcmp(staff[i].title,staff[j].title))<0) { c=staff[i];
staff[i]=staff[j];staff[j]=c;}break;
}
show();
system("cls"); /*清屏*/
printf("是否继续排序:是y/否n");
a=getch();
}
}
LZ 是不是足下软件学院的? 这个C的小东西N年前做过