教师信息包括教师号、姓名、性别、年龄、学历、职称、工资、住址、电话等(教师号不重复)。试设计一教师信息管理系统,使之能提供以下功能:
(1)系统以菜单方式工作
(2)教师信息录入功能--输入
(3)教师信息删除功能
(4)教师信息浏览功能 --输出
(5)查询和排序功能:(至少一种查询方式) --算法
按教师号查询
按职称查询等
要求:
(1)设计一个主函数和多个子函数,每个子函数完成一个相对独立的子功能。
(2)程序运行时,首先进行口令检查,再显示菜单。并能根据菜单调用相应的函数功能。
口令程序段的功能要求:
《1》提示用户输入一个口令。
《2》用户输入口令后,若口令对,则提示用户通过,可执行后续程序;否则不通过。
《3》可对用户的口令输入进行次数限制(如:重复输入3次都不对),则自动退出系统。
(3)显示数据时,一页显示不下,可分页显示。
我是个菜鸟,本着相互学习的目的, 我将我那拙劣的代码发到这里,给几年后的自己看,有问题还请网友多多指出。未来的自己回过头来看的时候,就当是个笑话吧。
代码优化了吗?没有,所以有很多冗长且无意义的语句。并且!!!变量名的命名很不明不白。
还有一件很致命的缺陷,我没有写注释。
好了,废话少说,上代码。
再补充一句,我这里有一个简单的登录函数,但我在main函数那里注释掉了。如果需要看看效果的话可以自行去掉注释。密码就在Login函数里,去找吧,我把所有的都放在那里了。
#include
#include
#include
int man=0;
struct Teacher
{
int idnum;//教师号
char name[15];//姓名
char sex[5];//性别
int age;//年龄
char xueli[10];//学历
char zhicheng[10];//职称
float income;//工资
char where[25];//地址
char tel[13];//电话
}T[51];
int count=0;
void input()
{
FILE *fp;
int i=count;
system("cls");
if(i>=51)
{
printf("数据已爆满");
return;
}
int L,id;
printf("请输入\n");
printf("教师号: ");scanf("%d",&id);
L=location(id);
int Max=0;
for(;L!=-1&&Max<3;Max++)
{
printf("教师号重复, 请重新输入(你还有%d次输入机会): ",3-Max);
scanf("%d",&id);
L=location(id);
}
if(Max>2)return;
T[i].idnum=id;
printf("姓名: ");scanf("%s",T[i].name);
printf("性别: ");scanf("%s",T[i].sex);
printf("年龄: ");scanf("%d",&T[i].age);
printf("学历: ");scanf("%s",T[i].xueli);
printf("职称: ");scanf("%s",T[i].zhicheng);
printf("地址: ");scanf("%s",T[i].where);
printf("电话: ");scanf("%s",T[i].tel);
printf("工资: ");scanf("%f",&T[i].income);
fp=fopen("teacher.bat","ab+");
fwrite(&T[i],sizeof(struct Teacher),1,fp);
fclose(fp);
count++;
}
int location(int id)
{
int i;
for(i=0;i<count;i++)
{
if(T[i].idnum==id)
return i;
}
return -1;
}
void Delete()
{
printf("请输入要删除教师的教师号\n");
int id,L;
scanf("%d",&id);
L=location(id);
if(L==-1)
{
printf("未找到该教师号\n");
system("pause");
return;
}
int i;
count--;
for(i=L;L<count;L++)
{
T[i]=T[i+1];
}
FILE *fp1,*fp2;
//fp1=fopen("teacher.bat","r+");
fp2=fopen("temp.bat","a+");
for(i=0;i<count;i++)
{
fwrite(&T[i],sizeof(struct Teacher),1,fp2);
}
fclose(fp2);
remove("teacher.bat");
rename("temp.bat", "teacher.bat");
printf("删除完成 :)");
system("pause");
}
void showtimE()
{
if(count==0)printf("无数据\n");
int i;
printf("人数统计: %d\n",count);
for(i=0;i<count;i++)
{
printf("序号:%-2d 教师号:%d 姓名:%s 性别:%s 年龄:%d 学历:%s \n\t 职称:%s 工资:%.2f 地址:%s 电话:%s\n",i+1,T[i].idnum,T[i].name,T[i].sex,T[i].age,T[i].xueli,T[i].zhicheng,T[i].income,T[i].where,T[i].tel);
}
}
void Change()
{
printf("1.教师号 2.姓名 3.性别 4.年龄 5.学历 6.职称 7.地址 8.电话 9.工资\n");
printf("请选择需要修改的选项:");
char error[10];
int in;
scanf("%s",error);
for(in=0;57<error[0]||error[0]<48||strlen(error)!=1;)
{
printf("输入有误,重新输入\n");
scanf("%s",error);
}
in=error[0]-48;
printf("请输入要修改的教师编号: ");
int id;
scanf("%d",&id);
while(location(id)==-1)
{
printf("未找到该教师编号,请重新输入\n");
scanf("%d",&id);
};
id=location(id);
switch(in)
{
case 1: {
int Max=0;
int new_id,L;
//printf("139count=%d\n",count);
printf("请输入教师号: ");
scanf("%d",&new_id);
L=location(new_id);
for(;Max!=2&&L!=-1;Max++)
{
printf("教师号重复, 请重新输入(你还有%d次输入机会): ",2-Max);
scanf("%d",&new_id);
L=location(new_id);
}
if(Max==2)return;
T[id].idnum=new_id;
break;
}
case 2: {
printf("请输入姓名: ");
scanf("%s",T[id].name);
break;
}
case 3: {
printf("请输入性别: ");
scanf("%s",T[id].sex);
break;
}
case 4: {
printf("请输入年龄: ");
scanf("%d",&T[id].age);
break;
}
case 5: {
printf("请输入学历: ");
scanf("%s",T[id].xueli);
break;
}
case 6: {
printf("请输入职称: ");
scanf("%s",T[id].zhicheng);
break;
}
case 7: {
printf("请输入地址: ");
scanf("%s",T[id].where);
break;
}
case 8: {
printf("请输入电话: ");
scanf("%s",T[id].tel);
break;
}
case 9: {
printf("请输入工资: ");
scanf("%f",&T[id].income);
break;
}
}
FILE *fp1,*fp2;
int i;
fp2=fopen("temp.bat","a+");
for(i=0;i<count;i++)
{
fwrite(&T[i],sizeof(struct Teacher),1,fp2);
}
fclose(fp2);
remove("teacher.bat");
rename("temp.bat", "teacher.bat");
printf("修改完毕\n");
}
void S1()
{
printf("请输入需要查询的教师号: ");
int id,L;
scanf("%d",&id);
L=location(id);
if(L==-1)printf("未查询到该教师号\n");
else
{
int i=L;
printf("教师号:%d 姓名:%s 性别:%s 年龄:%d 学历:%s \n\t 职称:%s 工资:%.2f 地址:%s 电话:%s\n",T[i].idnum,T[i].name,T[i].sex,T[i].age,T[i].xueli,T[i].zhicheng,T[i].income,T[i].where,T[i].tel);
}
system("pause");
}
void S2()
{
printf("请输入需要查询的职称: ");
char a[10];
scanf("%s",a);
int i,key=-1;
for(i=0;i<count;i++)
{
key=strcmp(a,T[i].zhicheng);
if(key==0)printf("教师号:%d 姓名:%s 性别:%s 年龄:%d 学历:%s \n\t 职称:%s 工资:%.2f 地址:%s 电话:%s\n",T[i].idnum,T[i].name,T[i].sex,T[i].age,T[i].xueli,T[i].zhicheng,T[i].income,T[i].where,T[i].tel);
}
if(key==-1)
{
printf("未找到该职称\n");
system("pause");
return;
}
system("pause");
}
void Search()
{
system("cls");
int key;
getchar();
int now=0;
do
{
printf("请选择你需要查询的项目: 1:教师号 2:职称\n");
scanf("%d",&key);getchar();
switch(key)
{
case 1:S1();now=1;break;
case 2:S2();now=1;break;
default:printf("输入有误,请重新输入\n");system("pause");
}
}while(now==0);
}
void show(int a[])
{
int i;
for(i=0;i<count;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
void SL(int a[])
{
int i,j,temp;
for(i=0;i<count-1;i++)
for(j=0;j<count-1-i;j++)
{
if(a[j]<a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
printf("降序情况如下:\n");
show(a);
}
void SR(int a[])
{
int i,j,temp;
for(i=0;i<count-1;i++)
for(j=0;j<count-1-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
printf("升序情况如下:\n");
show(a);
}
void S_age()
{
int age[count];
int i,ab,now;
for(i=0;i<count;i++)
{
age[i]=T[i].age;
}
do
{
printf("请选择:1.升序 2.降序\n");
scanf("%d",&ab);getchar();
switch(ab)
{
case 1:SR(age);now=1;break;
case 2:SL(age);now=1;break;
default:printf("输入有误,请重新输入\n");system("pause");
}
}while(now==0);
}
void S_id()
{
int id[count];
int i,ab,now;
for(i=0;i<count;i++)
{
id[i]=T[i].idnum;
}
do
{
printf("请选择:1.升序 2.降序\n");
scanf("%d",&ab);getchar();
switch(ab)
{
case 1:SR(id);now=1;break;
case 2:SL(id);now=1;break;
default:printf("输入有误,请重新输入\n");system("pause");
}
}while(now==0);
}
void Sort()
{
system("cls");
int key;
getchar();
int now=0;
do
{
printf("请选择你需要排序的项目: 1:年龄 2:教师号\n");
scanf("%d",&key);getchar();
switch(key)
{
case 1:S_age();now=1;break;
case 2:S_id();now=1;break;
default:printf("输入有误,请重新输入\n");system("pause");
}
}while(now==0);
}
int Login()
{
int n=0;
int i=0;
char name[10];
char mima[]={"123456"};
do
{
system("cls");
printf("***********************\n");
printf("* *\n");
printf("* *\n");
printf("* 请输入登录口令: *\n");
scanf("%s",&name);
n++;
i=strcmp(name,mima);
if(i!=0)
{
printf("口令错误,你还有%d次机会\n\n",3-n);
system("pause");
}
else
{
printf("* 匹配成功, 登陆成功 *\n");
printf("* *\n");
printf("* *\n");
printf("***********************\n");
system("pause");
return 1;
}
}while(n<3);
return 0;
}
void whatyouC()
{
system("cls");
printf("*********************************************\n");
printf("* 教师信息管理系统 *\n");
printf("* 1.信息录入 *\n");
printf("* 2.信息删除 *\n");
printf("* 3.信息显示 *\n");
printf("* 4.教师查询 *\n");
printf("* 5.信息修改 *\n");
printf("* 6.排序显示 *\n");
printf("* 7.窗口清理 *\n");
printf("* 0.退出系统 *\n");
printf("************* 工作次数 %d 次 **************\n",man);
man++;
}
int DoyouLike()
{
int in;
char error[20];
printf("请输入一个数字指令:");
scanf("%s",error);
for(in=0;57<error[0]||error[0]<48||strlen(error)!=1;)
{
printf("输入有误,重新输入\n");
scanf("%s",error);
}
in=error[0]-48;
switch(in)
{
case 0:return 0;
case 1:input();break;
case 2:Delete();break;
case 3:showtimE();system("pause");break;
case 4:Search();break;
case 5:Change();system("pause");break;
case 6:Sort();system("pause");break;
case 7:break;
default:
{
printf("输入有误,请重新输入\n");system("pause");break;
}
}
return 1;
}
void hennsinn()
{
int key=1;
do
{
whatyouC();
key=DoyouLike();
}while(key!=0);
}
void inti()
{
FILE *fp;
int i;
fp=fopen("teacher.bat","ab+");
getc(fp);
if(feof(fp));
else
{
rewind(fp);
}
for(i=0;feof(fp)==0;i++)
{
fseek(fp,sizeof(struct Teacher)*count,SEEK_SET);
fread(&T[i],sizeof(struct Teacher),1,fp);
count++;
getc(fp);
}
fclose(fp);
}
int main()
{
//int keykey=Login();
//if(keykey==0)return 0;
inti();//初始化, 读取文件数据
hennsinn();
return 0;
}
看完后想打我的话记得评论一句。
感谢阅读
时间20200103