第二个程序是C语言实训的程序
其实和第一个学生成绩管理系统程序差不多,只是多了文件功能!
Copyright ©Rushierer
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 60
typedef struct s_teleBook
{
int number; /*编号*/
char name[15]; /*姓名*/
char phone[12]; /*手机*/
char qq[15]; /*QQ号*/
}TELE;
typedef struct date
{
int infoCount; /*统计数据个数*/
}DATE;
void showMenu(); /*显示菜单*/
void mainMenu(TELE myBook[],int n,DATE date[]); /*显示首页*/
void showdate(TELE myBook[],int n,DATE date[]); /*只显示数据*/
void input(TELE myBook[],int n,DATE date[]); /*从键盘输入数据*/
void searchR(TELE myBook[],int n,DATE date[]); /*查询信息*/
void searchByNumber(TELE myBook[],int n,DATE date[]); /*按编号查询信息*/
void searchByName(TELE myBook[],int n,DATE date[]); /*按名字查询信息*/
void deleteR(TELE myBook[],int n,DATE date[]); /*删除信息*/
void insertR(TELE myBook[],int n,DATE date[]); /*插入信息*/
void modify(TELE myBook[],int n,DATE date[]); /*修改信息*/
void sortR(TELE myBook[],int n,DATE date[]); /*排序信息*/
void sortByName(TELE myBook[],int n,DATE date[]); /*按名字排序*/
void sortByNumber(TELE myBook[],int n,DATE date[]); /*按编号排序*/
void save(TELE myBook[],int n,DATE date[]); /*保存数据到文件*/
void display(TELE myBook[],int n,DATE date[]); /*显示数据*/
void read(TELE myBook[],int n,DATE date[]); /*从文件读取数据*/
int main()
{
int choice;
TELE myBook[N];
DATE date[1];
showMenu();
printf("\n");
printf("欢迎使用通讯录!\n");
printf("\n");
printf("首次使用通讯录,请输入要添加联系人的个数:");
scanf("%d",&date[0].infoCount);
printf("\n");
printf("1进行录入数据 0退出:");
scanf("%d",&choice);
switch(choice)
{
case 1:
system("cls");
input(myBook,date[0].infoCount,date);break;
case 0:
exit(0);break;
}
return 0;
}
/*显示选项Menu*/
void showMenu()
{
printf(" 通讯录管理系统 \n");
printf(" *******************************************\n");
printf(" * *\n");
printf(" * 1 input record 2 search record *\n");
printf(" * 3 delete record 4 insert record *\n");
printf(" * 5 modify record 6 sort record *\n");
printf(" * 7 save record 8 display record *\n");
printf(" * 9 read record 0 quit system *\n");
printf(" * *\n");
printf(" *******************************************\n");
}
/*显示主菜单*/
void mainMenu(TELE myBook[],int n,DATE date[])
{
int choice;
showMenu();
printf("请输入选项(0~9):");
scanf("%d",&choice);
switch(choice)
{
case 1:
system("cls");
input(myBook,n,date);break;
case 2:
system("cls");
searchR(myBook,n,date);break;
case 3:
system("cls");
deleteR(myBook,n,date);break;
case 4:
system("cls");
insertR(myBook,n,date);break;
case 5:
system("cls");
modify(myBook,n,date);break;
case 6:
system("cls");
sortR(myBook,n,date);break;
case 7:
system("cls");
save(myBook,n,date);break;
case 8:
system("cls");
display(myBook,n,date);break;
case 9:
system("cls");
read(myBook,n,date);break;
case 0:
exit(0);break;
}
}
/*从键盘输入联系人信息*/
void input(TELE myBook[],int n,DATE date[])
{
int j,i;
printf(" Input record \n");
printf("*****************************************************\n");
printf("\n");
printf("数据录入格式提示:\n");
printf("1.数据内容:编号、姓名、手机号码、QQ号\n");
printf("2.数据间以空格做间隔,最后回车录入数据结束!\n");
printf("\n");
for(i=0;i<n;i++)
{
printf("请输入第%d个联系人的信息:",i+1);
scanf(" %d",&myBook[i].number);
scanf("%s",myBook[i].name);
scanf("%s",myBook[i].phone);
scanf("%s",myBook[i].qq);
}
printf("\n");
printf("数据录入完成!\n");
printf("\n");
printf("1显示录入的信息 2返回主菜单 0退出:");
scanf("%d",&j);
if(j==1)
{
printf("\n");
display(myBook,n,date);
}
else if(j==2)
{
system("cls");
mainMenu(myBook,n,date);
}
else
exit(0);
}
/*显示所有信息*/
void display(TELE myBook[],int n,DATE date[])
{
int i,j;
printf("所有信息:\n");
printf("\n");
printf("编号 姓名 电话号码 QQ号 \n");
for(i=0;i<n;i++)
{
printf("%-6d%-15s%-15s%-15s\n",myBook[i].number,
myBook[i].name,
myBook[i].phone,
myBook[i].qq);
}
printf("\n");
printf("1返回主菜单 0退出:");
scanf("%d",&j);
if(j==1)
{
system("cls");
mainMenu(myBook,n,date);
}
else
exit(0);
}
/*只显示数据*/
void showdate(TELE myBook[],int n,DATE date[])
{
int i;
printf("已录入的信息:\n");
printf("\n");
printf("编号 姓名 电话号码 QQ号 \n");
for(i=0;i<n;i++)
{
printf("%-6d%-15s%-15s%-15s\n",myBook[i].number,
myBook[i].name,
myBook[i].phone,
myBook[i].qq);
}
}
/*查找数据*/
void searchR(TELE myBook[],int n,DATE date[])
{
int k;
printf(" Search record \n");
printf("*****************************************************\n");
printf("\n");
printf("查找方式:1.按编号查找 2.按姓名查找\n");
printf("请选择查找方式(1/2):");
scanf("%d",&k);
printf("\n");
if(k==1)
{
searchByNumber(myBook,n,date);
}
else
{
searchByName(myBook,n,date);
}
}
/*按编号查询*/
void searchByNumber(TELE myBook[],int n,DATE date[])
{
int i,j,k=0;
int number1;
printf("请输入想查找的编号:");
scanf("%d",&number1);
printf("\n");
printf("查找结果:");
printf("\n");
for(i=0;i<n;i++)
{
if(myBook[i].number==number1)
{
printf("%-6d%-15s%-15s%-15s\n",myBook[i].number,
myBook[i].name,
myBook[i].phone,
myBook[i].qq);
k+=1;
}
}
if(k==0)
printf("输入的编号不存在或输入格式不对!\n");
printf("\n");
printf("1重新查询 2返回主菜单 0退出:");
scanf("%d",&j);
switch(j)
{
case 1:
system("cls");
searchR(myBook,n,date);break;
case 2:
system("cls");
mainMenu(myBook,n,date);break;
case 0:
exit(0);break;
}
}
/*按姓名查询*/
void searchByName(TELE myBook[],int n,DATE date[])
{
int i,j,k=0;
char name1[15];
printf("请输入想查找的姓名:");
scanf("%s",name1);
printf("\n");
printf("查找结果:");
printf("\n");
for(i=0;i<n;i++)
{
if(strcmp(myBook[i].name,name1)==0)
{
printf("%-6d%-15s%-15s%-15s\n",myBook[i].number,
myBook[i].name,
myBook[i].phone,
myBook[i].qq);
k+=1;
}
}
if(k==0)
printf("输入的姓名不存在或输入格式不对!\n");
printf("\n");
printf("1重新查询 2返回主菜单 0退出:");
scanf("%d",&j);
switch(j)
{
case 1:
system("cls");
searchR(myBook,n,date);break;
case 2:
system("cls");
mainMenu(myBook,n,date);break;
case 0:
exit(0);break;
}
}
/*删除信息*/
void deleteR(TELE myBook[],int n,DATE date[])
{
int i,k,j;
printf(" Delete record \n");
printf("*****************************************************\n");
printf("\n");
showdate(myBook,n,date);
printf("已经录入%d个联系人的信息,你想删除第几联系人个的信息:",n);
scanf("%d",&k);
i=k-1;
for(;i<=n-2;i++)
{
strcpy(myBook[i].name,myBook[i+1].name);
strcpy(myBook[i].phone,myBook[i+1].phone);
strcpy(myBook[i].qq,myBook[i+1].qq);
myBook[i].number=myBook[i+1].number;
}
printf("\n");
printf("已成功删除!\n");
date[0].infoCount=date[0].infoCount-1;
n=n-1;
printf("\n");
printf("1显示修改后的信息 2返回主菜单 0退出:");
scanf("%d",&j);
switch(j)
{
case 1:
printf("\n");
display(myBook,n,date);break;
case 2:
system("cls");
mainMenu(myBook,n,date);break;
case 0:
exit(0);break;
}
}
/*插入信息*/
void insertR(TELE myBook[],int n,DATE date[])
{
int i,k,j;
int number;
char name[15]; /*姓名*/
char phone[12]; /*电话*/
char qq[15]; /*QQ号*/
printf(" Insert record \n");
printf("*****************************************************\n");
printf("\n");
showdate(myBook,n,date);
printf("\n");
printf("你想在第几个数据之后插入数据:");
scanf("%d",&k);
if(k>n||k<=0)
{
printf("\n");
printf("输入错误!\n");
printf("请重新输入你想在第几个数据之后插入数据:");
scanf("%d",&i);
k=i;
}
printf("\n");
printf("请输入插入的信息:");
scanf("%d",&number);
scanf("%s",name);
scanf("%s",phone);
scanf("%s",qq);
for(i=n;k+1<=i;i--);
{
strcpy(myBook[i].name,myBook[i-1].name);
strcpy(myBook[i].phone,myBook[i-1].phone);
strcpy(myBook[i].qq,myBook[i-1].qq);
myBook[i].number=myBook[i-1].number;
}
strcpy(myBook[k].name,name);
strcpy(myBook[k].phone,phone);
strcpy(myBook[k].qq,qq);
myBook[k].number=number;
date[0].infoCount=date[0].infoCount+1;
n=n+1;
printf("\n");
printf("插入完成!\n");
printf("\n");
printf("1显示修改后的信息输入 2返回主菜单 0退出:");
scanf("%d",&j);
switch(j)
{
case 1:
printf("\n");
display(myBook,n,date);break;
case 2:
system("cls");
mainMenu(myBook,n,date);break;
case 0:
exit(0);break;
}
}
/*修改信息*/
void modify(TELE myBook[],int n,DATE date[])
{
int i,k,j;
int number;
char name[15]; /*姓名*/
char phone[12]; /*电话*/
char qq[15]; /*QQ号*/
printf(" Modify record \n");
printf("*****************************************************\n");
printf("\n");
showdate(myBook,n,date);
printf("\n");
printf("已经录入%d个联系人的信息,你想修改第几个联系人的记录:",n);
scanf("%d",&k);
if(k>n||k<=0)
{
printf("\n");
printf("输入错误,无这条记录!\n");
printf("请重新输入你想修改第几个联系人的记录:");
scanf("%d",&i);
k=i;
}
printf("\n");
printf("请输入修改后的信息:");
scanf("%d",&number);
scanf("%s",name);
scanf("%s",phone);
scanf("%s",qq);
strcpy(myBook[k-1].name,name);
strcpy(myBook[k-1].phone,phone);
strcpy(myBook[k-1].qq,qq);
myBook[k-1].number=number;
printf("\n");
printf("修改完成!\n");
printf("\n");
printf("1显示修改后的信息 2返回主菜单 0退出:");
scanf("%d",&j);
switch(j)
{
case 1:
printf("\n");
display(myBook,n,date);break;
case 2:
system("cls");
mainMenu(myBook,n,date);break;
case 0:
exit(0);break;
}
}
/*排序信息*/
void sortR(TELE myBook[],int n,DATE date[])
{
int k;
printf(" Sort record \n");
printf("*****************************************************\n");
printf("\n");
printf("排序方式:1.按编号排序 2.按姓名排序\n");
printf("请选择排序方式(1/2):");
scanf("%d",&k);
printf("\n");
if(k==1)
{
sortByNumber(myBook,n,date);
}
else
{
sortByName(myBook,n,date);
}
}
/*按姓名排序信息*/
void sortByName(TELE myBook[],int n,DATE date[])
{
int i,j;
TELE temp;
for(j=1;j<n;j++)
for(i=0;i<n-j;i++)
if(strcmp(myBook[i].name,myBook[i+1].name)>0)
{
temp=myBook[i];
myBook[i]=myBook[i+1];
myBook[i+1]=temp;
}
printf("排序后的信息:\n");
printf("\n");
printf(" 姓名 编号 电话号码 QQ号 \n");
for(i=0;i<n;i++)
{
printf("%-15s%-6d%-15s%-15s\n",myBook[i].name,
myBook[i].number,
myBook[i].phone,
myBook[i].qq);
}
printf("\n");
printf("1重新排序 2返回主菜单 0退出:");
scanf("%d",&j);
switch(j)
{
case 1:
system("cls");
sortR(myBook,n,date);break;
case 2:
system("cls");
mainMenu(myBook,n,date);break;
case 0:
exit(0);break;
}
}
/*按编号排序信息*/
void sortByNumber(TELE myBook[],int n,DATE date[])
{
int i,j;
TELE temp;
for(j=1;j<n;j++)
for(i=0;i<n-j;i++)
if(myBook[i].number>myBook[i+1].number)
{
temp=myBooki[];
myBook[i]=myBook[i+1];
myBook[i+1]=temp;
}
printf("排序后的信息:\n");
printf("\n");
printf("编号 姓名 电话号码 QQ号 \n");
for(i=0;i<n;i++)
{
printf("%-6d%-15s%-15s%-15s\n",myBook[i].number,
myBook[i].name,
myBook[i].phone,
myBook[i].qq);
}
printf("\n");
printf("1重新排序 2返回主菜单 0退出:");
scanf("%d",&j);
switch(j)
{
case 1:
system("cls");
sortR(myBook,n,date);break;
case 2:
system("cls");
mainMenu(myBook,n,date);break;
case 0:
exit(0);break;
}
}
/*保存信息*/
void save(TELE myBook[],int n,DATE date[])
{
FILE *fp;
int i,j;
TELE temp;
printf(" Save record \n");
printf("*****************************************************\n");
if((fp=fopen("teleBook.txt","w"))==NULL) /*以写方式打开文本文件*/
{
printf("Failure to open teleBook.txt!\n");
printf("1返回主菜单 0退出:");
scanf("%d",&j);
if(j==1)
{
system("cls");
mainMenu(myBook,n,date);
}
else
exit(0);
}
for(j=1;j<n;j++) //对全部信息按序号排序后再保存到文件
for(i=0;i<n-j;i++)
if(myBook[i].number>myBook[i+1].number)
{
temp=myBook[i];
myBook[i]=myBook[i+1];
myBook[i+1]=temp;
}
for(i=0;i<n;i++)
{
fprintf(fp," %-6d%-15s%-15s%-15s",myBook[i].number,
myBook[i].name,
myBook[i].phone,
myBook[i].qq);
fprintf(fp,"\n");
}
fclose(fp);
printf("\n");
printf("保存通讯录信息成功!\n");
printf("\n");
printf("可在文件目录查看teleBook.txt文件!\n");
printf("\n");
printf("1返回主菜单 0退出:");
scanf("%d",&j);
if(j==1)
{
system("cls");
mainMenu(myBook,n,date);
}
else
exit(0);
}
/*从文件读取数据*/
void read(TELE myBook[],int n,DATE date[])
{
FILE *fp;
int i,j;
TELE myBook1[N];
printf(" Read record \n");
printf("*****************************************************\n");
printf("\n");
printf("读取信息结果:\n");
printf("\n");
if((fp=fopen("teleBook.txt","r"))==NULL) /*以读方式打开文本文件*/
{
printf("Failure to open teleBook.txt!\n");
printf("可能没有保存数据,可以返回主菜单先保存数据!\n");
printf("1返回主菜单 0退出:");
scanf("%d",&j);
if(j==1)
{
system("cls");
mainMenu(myBook,n,date);
}
else
exit(0);
}
for(i=0;!feof(fp);i++) /*若未读到文件末尾,则继续读*/
{
fscanf(fp," %6d",&myBook1[i].number);
fscanf(fp,"%15s",myBook1[i].name);
fscanf(fp,"%15s",myBook1[i].phone);
fscanf(fp,"%15s",myBook1[i].qq);
}
fclose(fp);
printf("编号 姓名 电话号码 QQ号 \n");
for(i=0;i<n;i++)
{
printf("%-6d%-15s%-15s%-15s",myBook1[i].number,
myBook1[i].name,
myBook1[i].phone,
myBook1[i].qq);
printf("\n");
}
printf("\n");
printf("读取通讯录文件信息成功!\n");
printf("\n");
printf("1返回主菜单 0退出:");
scanf("%d",&j);
if(j==1)
{
system("cls");
mainMenu(myBook,n,date);
}
else
exit(0);
}