#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<assert.h>//用来解决程序终止问题,查阅网上资料得到
#define M 100
#define N1 20
#define N2 30
#define N3 30
char title[100];
void OPEN();//总运行
void menu1();//主目录
void menu2();//查询目录
void refer();//查询页面
void getout();//退出程序
void input();//读取数据
void print();//输出数据
void refername();//根据姓名查询
void refernum();//根据学号查询
void referphone();//根据电话号码查询
void modify();//修改数据
void AddData();//添加数据
void Delete();//删除数据
int main()
{
OPEN();
}
struct linkman
{
int num;//学号
char name[N1];//姓名
char sex;//性别
char work[N2];//工作单位
int tele;//电话号码
char addr[N3];//邮箱地址
}s[M];
struct ITEM
{
int key;
int balue;
};
void additem(struct ITEM* itemper)
{
assert(itemper != NULL);
}
void getout()
{
printf("\n");
printf("\n");
printf(" 你已退出程序,欢迎下次使用。 \n");
printf("\n");
printf("\n");
}
void menu1()//主菜单
{
printf("_________________________________\n");
printf("| 手机通讯录操作系统 |\n");
printf("|_______________________________|\n");
printf("|*******************************|\n");
printf("|**********1.查询信息***********|\n");
printf("|**********2.修改数据***********|\n");
printf("|**********3.添加数据***********|\n");
printf("|**********4.删除数据***********|\n");
printf("|**********5.统计功能***********|\n");
printf("|**********6.退出系统***********|\n");
printf("|*******************************|\n");
printf("|_______________________________|\n");
}
void menu2()//查询菜单
{
printf("_________________________________\n");
printf("| 查询信息菜单 |\n");
printf("|_______________________________|\n");
printf("|********1.按姓名查询***********|\n");
printf("|********2.按学号查询***********|\n");
printf("|********3.按电话号码查询*******|\n");
printf("|********4.显示全部信息*********|\n");
printf("|********5.返回上一级目录*******|\n");
printf("|*******************************|\n");
printf("|_______________________________|\n");
}
void OPEN()//主运行
{
int input;
do
{
menu1();
printf("\n");
printf("请选择功能->");
scanf_s("%d", &input);
switch (input)
{
case 1:refer(); break;
case 2:modify(); break;
case 3:AddData(); break;
case 4:Delete(); break;
case 6:getout(); additem(NULL); break;
default:printf("选择错误,请重新选择!\n"); break;
}
} while (input);
}
void refer()//查询信息
{
int Q;
do
{
menu2();
printf("\n");
printf("请选择功能->");
scanf_s("%d", &Q);
switch (Q)
{
case 1:refername(); break;
case 2:refernum(); break;
case 3:referphone(); break;
case 4:print(); break;
case 5:OPEN(); break;
default:printf("选择错误,请重新选择!\n");
}
} while (Q);
}
void input()//输入数据,查询所有数据
{
FILE* fp;
fp = fopen("txl2023.txt", "r");
if (fp == NULL)
{
printf("文件打开失败!");
exit(0);
}
fgets(title, 100, fp);
int i = 0;
while (!feof(fp))
{
fscanf(fp, "%d%s%c%s%d%s", s[i].num, s[i].name, s[i].sex, s[i].work, s[i].tele, s[i].addr);
i++;
}
fclose(fp);
}
void print()//输出所有数据
{
int i;
puts(title);
for (i = 0; i < M; i++)
{
printf("%d %-9s %c %16s %d %16s\n", s[i].num, s[i].name, s[i].sex, s[i].work, s[i].tele, s[i].addr);
}
}
void refername()//按姓名进行查询
{
int k = 0, i=0;
char nam[100];
printf("请输入你要查找的姓名->");
scanf_s("%s", nam,100);
FILE* fp;
fp = fopen("txl2023.txt", "r");
if (fp == NULL)
{
printf("文件打开失败!");
exit(0);
}
while (!feof(fp))
{
fscanf(fp, "%d%s%c%s%s%s", s[i].num, s[i].name, s[i].sex, s[i].work, s[i].tele, s[i].addr);
if (strcmp(nam, s[i].name) == 0)
{
printf("\n已查到该信息,记录为:\n");
puts(title);
printf(" % d % -9s % c % 16s % d % 16s\n", s[i].num, s[i].name, s[i].sex, s[i].work, s[i].tele, s[i].addr);
k = 1;
break;
}
i++;
}
if (k = 0)
{
printf("\n对不起,查无此人!\n");
}
fclose(fp);
}
void refernum()//按学号进行查询
{
int k = 0, i=0;
int num;
printf("请输入你要查找的学号->");
scanf_s("%d", &num);
FILE* fp;
fp = fopen("txl2023.txt", "r");
if (fp == NULL)
{
printf("文件打开失败!");
exit(0);
}
while (!feof(fp))
{
fscanf(fp, "%d%s%c%s%d%s", &s[i].num, &s[i].name, &s[i].sex, &s[i].work, &s[i].tele, &s[i].addr);
if (num == s[i].num)
{
printf("\n已查到该信息,记录为:\n");
puts(title);
printf(" % d % -9s % c % 16s % d % 16s\n", s[i].num, s[i].name, s[i].sex, s[i].work, s[i].tele, s[i].addr);
k = 1;
break;
}
i++;
}
if (k = 0)
{
printf("\n对不起,查无此人!\n");
}
fclose(fp);
}
void referphone()//按电话号码进行查询
{
int k = 0, i=0;
int tele;
printf("请输入你要查找的电话号码->");
scanf_s("%d", &tele);
FILE* fp;
fp = fopen("txl2023.txt", "r");
if (fp == NULL)
{
printf("文件打开失败!");
exit(0);
}
while (!feof(fp))
{
fscanf(fp, "%d%s%c%s%d%s", s[i].num, s[i].name, s[i].sex, s[i].work, s[i].tele, s[i].addr);
if (tele == s[i].tele)
{
printf("\n已查到该信息,记录为:\n");
puts(title);
printf(" % d % -9s % c % 16s % d % 16s\n", s[i].num, s[i].name, s[i].sex, s[i].work, s[i].tele, s[i].addr);
k = 1;
break;
}
i++;
}
if (k = 0)
{
printf("\n对不起,查无此人!\n");
}
fclose(fp);
}
void modify()//修改数据
{
int m, k = 0, i = 0;
char namekey[10];
printf("请输入你要修改的通讯录姓名->");
scanf_s("%s", &namekey);
FILE* fp;
fp = fopen("txl2023.txt", "r");
if (fp == NULL)
{
printf("文件打开失败!");
}
while (!feof(fp))
{
fscanf_s(fp, "%d%s%c%s%d%s", s[i].num, s[i].name, s[i].sex, s[i].work, s[i].tele, s[i].addr);
if (strcmp(namekey, s[i].name) == 0)
{
k = 1;
break;
}
i++;
}
if (k == 1)
{
printf("已经查到该姓名所对应的信息\n");
puts(title);
printf(" % d % -9s % c % 16s % d % 16s\n", s[i].num, s[i].name, s[i].sex, s[i].work, s[i].tele, s[i].addr);
printf("*********************\n");
printf("******1.确定修改******\n");
printf("******0.放弃修改******\n");
printf("*********************\n");
printf("请选择->");
scanf_s("%d", &m);
if (m == 1)
{
char num1[20];
printf("\n请输入你要修改的新姓名信息->");
scanf_s("%s", num1,20);
strcpy_s(s[i].name, num1,20);
int num2;
printf("\n请输入你要修改的新电话信息->");
scanf_s("%d", &num2);
s[i].tele=num2;
char num3;
printf("\n请输入你要修改的新性别信息->");
scanf_s("%c", &num3,1);
s[i].sex=num3;
int num4;
printf("\n请输入你要修改的新学号信息->");
scanf_s("%d", &num4);
s[i].num = num4;
char num6[30];
printf("\n请输入你要修改的新工作单位信息->");
scanf_s("%s", num6,30);
strcpy_s(s[i].work, num6,30);
char num7[30];
printf("\n请输入你要修改的新邮箱地址信息->");
scanf_s("%s", num7,30);
strcpy_s(s[i].addr, num7,30);
printf("修改成功\n");
printf("修改后的通讯录信息如下\n");
print();
}
}
else
{
printf("查无此人,无法修改!");
}
fclose(fp);
}
void AddData()//添加数据
{
int i = 0;
FILE* fp;
fp = fopen("txl2023.txt", "r");
if (fp == NULL)
{
printf("文件打开失败!");
}
while (!feof(fp))
{
fscanf_s(fp, "%d%s%c%s%s%s", s[i].num, s[i].name, s[i].sex, s[i].work, s[i].tele, s[i].addr);
i++;
}
char num1[20];
printf("\n请输入你要添加的新姓名信息->");
scanf_s("%s", num1,20);
strcpy_s(s[i].name, num1,20);
int num2;
printf("\n请输入你要添加的新电话信息->");
scanf_s("%d", &num2);
s[i].tele=num2;
char num3;
printf("\n请输入你要添加的新性别信息->");
scanf_s("%c", &num3,1);
s[i].sex=num3;
int num4;
printf("\n请输入你要添加的新学号信息->");
scanf_s("%d", &num4);
s[i].num=num4;
char num6[30];
printf("\n请输入你要添加的新工作单位信息->");
scanf_s("%s", num6,30);
strcpy_s(s[i].work, num6,30);
char num7[30];
printf("\n请输入你要添加的新邮箱地址信息->");
scanf_s("%s", num7,30);
strcpy_s(s[i].addr, num7,30);
printf("添加成功\n");
printf("添加后的通讯录信息如下\n");
print();
fclose(fp);
}
void Delete()//删除数据
{
int m, k = 0, i = 0;
char namekey[20];
long a = 0;
printf("请输入你要删除的通讯录姓名->");
scanf_s("%s", &namekey,20);
FILE* fp;
fp = fopen("txl2023.txt", "a");
if (fp == NULL)
{
printf("文件打开失败!");
}
while (!feof(fp))
{
fscanf_s(fp, "%d%s%c%s%d%s", s[i].num, s[i].name, s[i].sex, s[i].work, s[i].tele, s[i].addr);
if (strcmp(namekey, s[i].name) == 0)
{
k = 1;
break;
}
i++;
}
if (k == 1)
{
printf("已经查到该姓名所对应的信息\n");
puts(title);
printf(" % d % -9s % c % 16s % d % 16s\n", s[i].num, s[i].name, s[i].sex, s[i].work, s[i].tele, s[i].addr);
printf("*********************\n");
printf("******1.确定删除******\n");
printf("******0.放弃删除******\n");
printf("*********************\n");
printf("请选择->");
scanf("%d", &m);
int n;
if (m == 1)
{
for (n = i; n < M - 1; n++)
{
strcpy_s(s[n].name, s[n + 1].name,1); strcpy_s(s[n].work, s[n + 1].work,1); s[n].num=s[n + 1].num;
s[n].sex=s[n + 1].sex; strcpy_s(s[n].addr, s[n + 1].addr,1); s[n].tele=s[n + 1].tele;
}
printf("删除成功\n");
printf("删除后的通讯录信息如下\n");
print();
}
}
else
{
printf("查无此人,无法修改!");
}
fclose(fp);
}