#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
struct record
{
char name[20];
char age[10];
char phone[20];
char adress[40];
char number[30];
char B_number[30];
}contact[500];
int NO=0;
FILE *fp,*fp2;
void mainmenu(); //主菜单
void newrecord(); //新建菜单
void browsemenu(); //浏览菜单
void searchmenu(); //查找菜单
void searchname(); //按姓名查找
void searchphone(); //按电话查找
void modifymenu(); //修改菜单
void deletemenu(); //删除菜单
void deleteall(); //删除所有
void deletesingle(); //删除单个
void deletename(); //按姓名删除
void deletephone(); //按号码删除
void savefile();
void read_NO();
void over();
void main()
{
printf("\n\t\t :)欢迎使用学生信息管理系统beta");
printf("\n\t\t文件导入中……请稍后……\n\n\n\n\n");
system("cls");
while (1)
{
mainmenu();
}
}
void mainmenu() //主菜单
{
char choice;
system("cls");
printf("\n\n\n") ;
printf("╔╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╗\n");
printf("╠ ┏━━━━━━━━━━━━━┓ ╣\n");
printf("╠**********************┃ 学生信息管理系统 ┃**********************╣\n");
printf("╠ ┗━━━━━━━━━━━━━┛ ╣\n");
printf("╠ ╣\n");
printf("╠ ╭─────────────╮ ╣\n");
printf("╠**********************│ 1 录入信息 │**********************╣\n");
printf("╠ ╰─────────────╯ ╣\n");
printf("╠ ╣\n");
printf("╠ ╭─────────────╮ ╣\n");
printf("╠**********************│ 2 浏览信息 │**********************╣\n");
printf("╠ ╰─────────────╯ ╣\n");
printf("╠ ╣\n");
printf("╠ ╭─────────────╮ ╣\n");
printf("╠**********************│ 3 查找信息 │**********************╣\n");
printf("╠ ╰─────────────╯ ╣\n");
printf("╠ ╣\n");
printf("╠ ╭─────────────╮ ╣\n");
printf("╠**********************│ 4 修改信息 │**********************╣\n");
printf("╠ ╰─────────────╯ ╣\n");
printf("╠ ╣\n");
printf("╠ ╭─────────────╮ ╣\n");
printf("╠**********************│ 5 删除信息 │**********************╣\n");
printf("╠ ╰─────────────╯ ╣\n");
printf("╠ ╣\n");
printf("╠ ╭─────────────╮ ╣\n");
printf("╠**********************│ 6 退出 │**********************╣\n");
printf("╠ ╰─────────────╯ ╣\n");
printf("╚╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╝\n");
printf("\n\t\t请选择(1-6):");
choice=getch();
switch (choice)
{
case '1':newrecord();break;
case '2':browsemenu();break;
case '3':searchmenu();break;
case '4':modifymenu();break;
case '5':deletemenu();break;
case '6':exit(0);
default:mainmenu();
}
}
void newrecord() //新建菜单
{
printf("\n\t\t**************** 请输入学生信息 ****************\n");
if((fp=fopen("contact.txt","r"))==0)
{
fp=fopen("contact.txt","w");
fclose(fp);
fp2=fopen("NO.txt","w");
NO=0;
fprintf(fp2,"NO=%d",NO);
fclose(fp2);
}
read_NO();
printf("\n\t输入姓名: 年龄: 电话号码: 家庭住址: 学号: 寝室号码:\n");
scanf("%s%s%s%s%s%s",&contact[NO].name,&contact[NO].age,&contact[NO].phone,&contact[NO].adress,&contact[NO].number,&contact[NO].B_number);
savefile();
printf("\n\t\t是否继续添加?(y/n):");
if (getch()=='y')
newrecord();
mainmenu();
}
void browsemenu() //浏览菜单
{
int i;
system("cls");
read_NO();
fp=fopen("contact.txt","r");
if(fp==0)
{
printf("\n\n\n\n\n\t\t\t 文件不存在");
over();
}
for (i=0;i<NO;i++)
fscanf(fp,"姓名:%s\n年龄:%s\n联系电话:%s\n家庭住址:%s\n学号:%s\n寝室号码:%s\n\n",&contact[i].name,&contact[i].age,&contact[i].phone,&contact[i].adress,&contact[i].number,&contact[i].B_number);
fclose(fp);
if(NO!=0)
{
printf("\t\t*************** 以下为学生所有信息************\n");
printf("\n\t\t╔═══╦══╦══════╦════╦══╦════╗\n");
printf("\t\t║姓名 ║年龄║联系电话 ║家庭住址║学号║寝室号码║\n");
for(i=0;i<NO;i++)
{
printf("\t\t╠═══╬══╬══════╬════╬══╬════╣\n");
printf("\t\t║%-6s║%-4s║%-12s║%-8s║%-4s║%-8s║\n",contact[i].name,contact[i].age,contact[i].phone,contact[i].adress,contact[i].number,contact[i].B_number);
}
printf("\t\t╚═══╩══╩══════╩════╩══╩════╝\n");
printf("\t\t************************************************");
}
else
printf("\n\t\t☆学生信息中无任何纪录☆");
printf("\n\t\t☆按任意键返回主菜单☆:");
getch();
return;
}
void searchmenu() //查找菜单
{
char choice;
system("cls");
printf("\n\t\t******************* 查找菜单 *******************");
printf("\n\t\t*************** ☆1 .按姓名查找 *****************");
printf("\n\t\t*************** ☆2 .按电话查找 *****************");
printf("\n\t\t*************** ☆3 .返回主菜单 *****************");
printf("\n\t\t************************************************");
printf("\n\t\t请选择:");
choice=getche();
switch (choice)
{
case '1':searchname();break;
case '2':searchphone();break;
case '3':mainmenu();break;
}
}
void searchname() //按姓名查找
{
int mark=0;
int i;
char name[20];
printf("\n\t\t***************** 按姓名查找 *******************");
printf("\n\t\t请输入学生姓名:");
scanf("%s",name);
read_NO();
fp=fopen("contact.txt","r");
for(i=0;i<NO;i++)
{
fscanf(fp,"姓名:%s\n年龄:%s\n联系电话:%s\n家庭住址:%s\n学号:%s\n寝室号码:%s\n\n",&contact[i].name,&contact[i].age,&contact[i].phone,&contact[i].adress,&contact[i].number,&contact[i].B_number);
if (strcmp(contact[i].name,name)==0)
{
printf("\n\t\t************ 以下是您查找的学生信息 **********");
printf("\n\t\t姓 名: %s",contact[i].name);
printf("\n\t\t年 龄: %s",contact[i].age);
printf("\n\t\t联系电话: %s",contact[i].phone);
printf("\n\t\t家庭住址: %s",contact[i].adress);
printf("\n\t\t学 号: %s",contact[i].number);
printf("\n\t\t寝室号码: %s",contact[i].B_number);
printf("\n\t\t************************************************");
mark++;
}
}
fclose(fp);
if(mark==0)
printf("\n\t\t没有该姓名的学生纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
void searchphone() //按电话查找
{
int mark=0;
int i;
char phone[20];
printf("\n\t\t****************** 按电话查找 ******************");
printf("\n\t\t请输入电话:");
scanf("%s",&phone);
read_NO();
fp=fopen("contact.txt","r");
for(i=0;i<NO;i++)
{
fscanf(fp,"姓名:%s\n年龄:%s\n联系电话:%s\n家庭住址:%s\n学号:%s\n寝室号码:%s\n\n",&contact[i].name,&contact[i].age,&contact[i].phone,&contact[i].adress,&contact[i].number,&contact[i].B_number);
if (strcmp(contact[i].phone,phone)==0)
{
printf("\n\t\t************ 以下是您查找的学生信息 **********");
printf("\n\t\t姓 名: %s",contact[i].name);
printf("\n\t\t年 龄: %s",contact[i].age);
printf("\n\t\t联系电话: %s",contact[i].phone);
printf("\n\t\t家庭住址: %s",contact[i].adress);
printf("\n\t\t学 号: %s",contact[i].number);
printf("\n\t\t寝室号码: %s",contact[i].B_number);
printf("\n\t\t************************************************");
mark++;
}
}
fclose(fp);
if(mark==0)
printf("\n\t\t没有该姓名的学生纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
void modifymenu() //修改菜单
{
int mark=0;
int i,k;
int t=0;
char choice;
char name[20];
struct record modify;
system("cls");
printf("\n\t\t请输入您要修改的姓名:");
scanf("%s",name);
read_NO();
fp=fopen("contact.txt","r+");
for(i=0;i<NO;i++)
fscanf(fp,"姓名:%s\n年龄:%s\n联系电话:%s\n家庭住址:%s\n学号:%s\n寝室号码:%s\n\n",&contact[i].name,&contact[i].age,&contact[i].phone,&contact[i].adress,&contact[i].number,&contact[i].B_number);
for(i=0;i<NO;i++)
{
if (strcmp(contact[i].name,name)==0)
{
k=i;mark=1;
modify=contact[i];
printf("\n\t\t********** 以下是您将修改的学生信息 **********");
printf("\n\t\t姓 名: %s",contact[i].name);
printf("\n\t\t年 龄: %s",contact[i].age);
printf("\n\t\t联系电话: %s",contact[i].phone);
printf("\n\t\t家庭住址: %s",contact[i].adress);
printf("\n\t\t 学 号: %s",contact[i].number);
printf("\n\t\t寝室号码: %s",contact[i].B_number);
printf("\n\t\t是否继续?y/n");
if(getch()=='n')
modifymenu();
else
{
printf("\n\t\t选择您要修改的选项:");
printf("\n\t\t\t(1).姓 名");
printf("\n\t\t\t(2).年 龄");
printf("\n\t\t\t(3).联系电话");
printf("\n\t\t\t(4).家庭住址");
printf("\n\t\t\t(5).学 号");
printf("\n\t\t\t(6).寝室号码");
printf("\n\t\t\t(7).返 回");
printf("\n\t\t请选择: ");
choice=getch();
switch(choice)
{
case '1': printf("姓 名:"); scanf("%s",contact[i].name); break;
case '2': printf("年 龄:"); scanf("%s",contact[i].age); break;
case '3': printf("联系电话:"); scanf("%s",contact[i].phone); break;
case '4': printf("家庭住址:"); scanf("%s",contact[i].adress); break;
case '5': printf("学 号:"); scanf("%s",contact[i].number); break;
case '6': printf("寝室号码:"); scanf("%s",contact[i].B_number); break;
case '7': mainmenu(); break;
default: modifymenu();
}
printf("\n\t\t您的修改结果为:");
printf("\n\t\t姓 名: %s",contact[i].name);
printf("\n\t\t年 龄: %s",contact[i].age);
printf("\n\t\t联系电话: %s",contact[i].phone);
printf("\n\t\t家庭住址: %s",contact[i].adress);
printf("\n\t\t学 号: %s",contact[i].number);
printf("\n\t\t寝室号码: %s",contact[i].B_number);
printf("\n\t\t确认修改?y/n");
if(getch()=='n')
{
contact[i]=modify;
printf("\n\t\t修改未保存!");
}
else
{
fclose(fp);
fp=fopen("contact.txt","w");
for(i=0;i<NO;i++)
fprintf(fp,"姓名:%s\n年龄:%s\n联系电话:%s\n家庭住址:%s\n学号:%s\n寝室号码:%s\n\n",contact[i].name,contact[i].age,contact[i].phone,contact[i].adress,contact[i].number,contact[i].B_number);
fclose(fp);
printf("\n\t\t修改成功!");
}
printf("\n\t\t是否继续修改?(y/n)");
if (getch()=='y')
modifymenu();
}
}
}
if (mark==0)
{
printf("\n\t\t没有该学生的纪录");
printf("\n\t\t是否继续修改?(y/n)");
if (getch()=='y')
modifymenu();
}
return;
}
void deletemenu() //删除菜单
{
char choice;
read_NO();
if(NO==0)
{
printf("\n\t\t对不起,文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
system("cls");
printf("\n\t\t******************* 删除菜单 *******************");
printf("\n\t\t**************** ☆1 .删除所有 ******************");
printf("\n\t\t**************** ☆2 .删除单个 ******************");
printf("\n\t\t**************** ☆3 .返回主菜单 *****************");
printf("\n\t\t************************************************");
printf("\n\t\t请选择:");
choice=getch();
switch(choice)
{
case '1':deleteall();break;
case '2':deletesingle();break;
case '3':mainmenu();break;
default:mainmenu();
}
}
void deleteall() //删除所有
{
printf("\n\t\t确认删除?(y/n)");
if (getch()=='y')
{
fp=fopen("contact.txt","w");
fclose(fp);
NO=0;
fp2=fopen("NO.txt","w");
fprintf(fp2,"NO=%d",NO);
fclose(fp2);
printf("\n\t\t纪录已删除,按任意键返回主菜单");
getch();
return;
}
else
return;
}
void deletesingle() //删除单个
{
char choice;
printf("\n\t\t\t☆1 .按姓名删除");
printf("\n\t\t\t☆2 .按号码删除");
printf("\n\t\t\t☆3 .返回删除菜单");
printf("\n\t\t请选择:");
choice=getch();
switch (choice)
{
case '1':deletename();break;
case '2':deletephone();break;
case '3':deletemenu();break;
}
}
void deletename() //按姓名删除
{
int i,j,k;
int mark=0;
char name[20];
printf("\n\t\t请输入要删除该学生姓名:");
scanf("%s",name);
read_NO();
if(NO==0)
{
printf("\n\t\t对不起,文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
fp=fopen("contact.txt","r");
for(i=0;i<NO;i++)
fscanf(fp,"姓名:%s\n年龄:%s\n联系电话:%s\n家庭住址:%s\n学号:%s\n寝室号码:%s\n\n",&contact[i].name,&contact[i].age,&contact[i].phone,&contact[i].adress,&contact[i].number,&contact[i].B_number);
fclose(fp);
for (i=0;i<NO;i++)
{
if (strcmp(contact[i].name,name)==0)
{
k=i;
printf("\n\t\t以下是您要删除的学生纪录:");
printf("\n\t\t姓 名: %s",contact[i].name);
printf("\n\t\t年 龄: %s",contact[i].age);
printf("\n\t\t联系电话: %s",contact[i].phone);
printf("\n\t\t家庭住址: %s",contact[i].adress);
printf("\n\t\t学 号: %s",contact[i].number);
printf("\n\t\t寝室号码: %s",contact[i].B_number);
printf("\n\t\t是否删除?(y/n)");
if (getch()=='y')
{
NO--;
for(j=k;j<NO;j++)
contact[j]=contact[j+1];
fp2=fopen("NO.txt","w");
if(fp2==0)
printf(".......");
fprintf(fp2,"NO=%d",NO);
fclose(fp2);
fp=fopen("contact.txt","w");
if(fp==0)
printf(".......//\\");
for(j=0;j<NO;j++)
fprintf(fp,"姓名:%s\n年龄:%s\n联系电话:%s\n家庭住址:%s\n学号:%s\n寝室号码:%s\n\n",contact[j].name,contact[j].age,contact[j].phone,contact[j].adress,contact[j].number,contact[j].B_number);
fclose(fp);
mark++;
printf("\n\t\t删除成功");
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletename();
return;
}
else
return;
}
continue;
}
if (mark==0)
{
printf("\n\t\t没有该学生的纪录");
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletename();
return;
}
}
void deletephone() //按号码删除
{
int i,j,k;
int mark=0;
char phone[20];
printf("\n\t\t请输入要删除联系电话:");
scanf("%s",phone);
read_NO();
if(NO==0)
{
printf("\n\t\t对不起,文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
fp=fopen("contact.txt","r");
for (i=0;i<NO;i++)
fscanf(fp,"姓名:%s\n年龄:%s\n联系电话:%s\n家庭住址:%s\n学号:%s\n寝室号码:%s\n\n",&contact[i].name,&contact[i].age,&contact[i].phone,&contact[i].adress,&contact[i].number,&contact[i].B_number);
fclose(fp);
for (i=0;i<NO;i++)
{
if (strcmp(contact[i].phone,phone)==0)
{
k=i;
printf("\n\t\t以下是您要删除的学生纪录:");
printf("\n\t\t姓 名: %s",contact[i].name);
printf("\n\t\t年 龄: %s",contact[i].age);
printf("\n\t\t联系电话: %s",contact[i].phone);
printf("\n\t\t家庭住址: %s",contact[i].adress);
printf("\n\t\t学 号: %s",contact[i].number);
printf("\n\t\t寝室号码: %s",contact[i].B_number);
printf("\n\t\t是否删除?(y/n)");
if (getch()=='y')
{
NO--;
for (j=i;j<NO;j++)
contact[j]=contact[j+1];
fp2=fopen("NO.txt","w");
fprintf(fp2,"NO=%d",NO);
fclose(fp2);
fp=fopen("contact.txt","w");
for(j=0;j<NO;j++)
fprintf(fp,"姓名:%s\n年龄:%s\n联系电话:%s\n家庭住址:%s\n学号:%s\n寝室号码:%s\n\n",contact[j].name,contact[j].age,contact[j].phone,contact[j].adress,contact[j].number,contact[j].B_number);
fclose(fp);
mark++;
printf("\n\t\t删除成功");
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletename();
return;
}
else
return;
}
continue;
}
if (mark==0)
{
printf("\n\t\t没有该学生的纪录");
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletephone();
return;
}
}
void savefile()
{
int i;
fp=fopen("contact.txt","a+");
fseek(fp,0,SEEK_END);
fprintf(fp,"姓名:%s\n年龄:%s\n联系电话:%s\n家庭住址:%s\n学号:%s\n寝室号码:%s\n\n",contact[NO].name,contact[NO].age,contact[NO].phone,contact[NO].adress,contact[NO].number,contact[NO].B_number);
fclose(fp);
NO++;
fp2=fopen("NO.txt","w");
fprintf(fp2,"NO=%d",NO);
fclose(fp2);
printf("\n\t\t已成功保存至文件!\n");
}
void read_NO()
{
fp2=fopen("NO.txt","r");
if(fp2==NULL)
{
printf("\n\t\t对不起,文件中无任何纪录");
over();
}
fscanf(fp2,"NO=%d",&NO);
fclose(fp2);
}
void over()
{
printf("\n\t\t按任意键返回主菜单");
getch();
mainmenu();
}