📄 顺序表嵌入式1班-很好很强大-通讯录.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 100
typedef struct
{
char name[10];//姓名
char address[20];//地址
int no;//电话号码
}list;
typedef struct sss
{
list data[SIZE];
int length; //记录输入数据
}SeqList;
SeqList *L;
void save()
{
FILE *fp;
int i;
if((fp=fopen("txl.txt","wb"))==NULL)
{ printf("cannot open file\n");
return;
}
if(fwrite(L,sizeof(struct sss),1,fp)!=1)
printf("file write error\n");
printf("文件保存成功!\n");
fclose(fp);
}
void open()
{ FILE *fp;
int i=0;
if((fp=fopen("txl.txt","rb"))==NULL)
{ printf("cannot open file\n");
return;
}
fread(L,sizeof(struct sss),1,fp);
printf("文件打开成功!\n");
fclose(fp);
}
//选择菜单
int menu_select()
{
int choice;
printf("|******************** 通讯录 ******************|\n");
printf("|----------------------------------------------|\n");
printf("| 主菜单项 |\n");
printf("|----------------------------------------------|\n");
printf("| 1-----输入 2-----追加 |\n");
printf("| 3-----查询 4-----删除 |\n");
printf("| 5-----修改 6-----输出 |\n");
printf("| 6-----输出 7-----保存 |\n");
printf("| 8-----打开 0-----退出 |\n");
printf("|----------------------------------------------|\n");
printf("请输入菜单项数字(0~8):");
do
{
scanf("%d",&choice);
}while(choice<0||choice>8);
return choice;
}
//初始化
SeqList *init_SeqList()
{
L=(SeqList *)malloc(sizeof(SeqList));
L->length=0;
return L;
}
void a()
{
int i=0;
int j=0;
int k=0;
int choice=0;
for(i=0;i<80;i++)
{
for(j=0;j<=i;j++)
printf(">");
if(i<79)
system("cls");
}
for(k=0;k<50;k++)
{
printf(" \n");
printf(" * * * *\n");
printf(" * * *\n");
printf(" * *\n");
printf(" * *\n");
printf(" * *\n");
printf(" * \n");
system("cls");
for(i=0;i<10;i++)
;
}
system("cls");
for(i=0;i<60;i++)
{
for(j=0;j<i;j++)
printf(" ");
printf("** ** ** **\n");
for(j=0;j<i;j++)
printf(" ");
printf("** ** ** **\n");
for(j=0;j<i;j++)
printf(" ");
printf("********* *********\n");
for(j=0;j<i;j++)
printf(" ");
printf("** ** ** **\n");
for(j=0;j<i;j++)
printf(" ");
printf("** ** ** **\n");
if(i<59)
system("cls");
}
}
//输入功能
SeqList *append_SeqList()
{
int i;
for(i=0;i<SIZE;i++)
{
printf("请输入姓名以@结束\n");
scanf("%s",L->data[L->length].name);
if(L->data[L->length].name[0]=='@')
{
break;
}
else
{
printf("请输入地址\n");
scanf("%s",L->data[L->length].address);
printf("电话号码\n");
scanf("%d",&L->data[L->length].no);
}
L->length++;
}
return L;
}
//插入功能
SeqList *Insert_SeqList()
{
int j,i;
int no;
char name[10],address[30];
printf("请输入要插入的位置\n");
scanf("%d",&i);
if (L->length>=SIZE)
{
printf("表满");/*表空间已满,不能插入 */
return L;
}
if (i<1 || i>L->length+1)/*检查插入位置的正确性*/
{
printf("位置错");
return L;
}
for(j=L->length-1;j>=i-1;j--)
{
L->data[j+1]=L->data[j]; /* 结点移动 */
}
printf("请输入姓名\n");
scanf("%s",name);
strcpy(L->data[i-1].name,name);
printf("请输入地址\n");
scanf("%s",address);
strcpy(L->data[i-1].address,address);
printf("请输入电话号码\n");
scanf("%d",&no);
L->data[i-1].no=no;
printf("插入成功\n");
L->length++;
return L;
}
//删除功能
SeqList *Delete_SeqList()
{
int j,i,no,x;
char c;
printf("请输入要删除的电话号码 \n");
scanf("%d",&no);
for(j=0;j<L->length;j++)
{
if(L->data[j].no==no) /*检查空表及删除位置的合法性*/
{
i=j;
printf("你确定要删除这项吗?(y/n)");
fflush(stdin);
c=getchar();
if(c=='n')
{
printf("此项删除被取消!\n");
return 0;
}
if(c=='y')
{
for(j=i;j<=L->length;j++)
{
L->data[j-1]=L->data[j]; /*向上移动*/
}
printf("删除成功\n");
}
break;
}
else
{
if(j==L->length-1)
{
printf("对不起!没有找到你要删除的信息!\n");
break;
}
else
{
continue;
}
}
}
L->length--;
return L; /*删除成功*/
}
//查找功能
SeqList *Location_SeqList()
{
int j,m;
char name[10];
printf("请输入要查找的姓名\n");
scanf("%s",name);
for(j=0;j<L->length;j++)
{
if(strcmp(name,L->data[j].name)==0)
{
printf("姓名\t%s\n",L->data[j].name);
printf("地址\t%s\n",L->data[j].address);
printf("电话\t%d\n",L->data[j].no);
break;
}
else
{
m++;
}
if(m==L->length-1)
{
printf("no\n");
}
}
return L;
}
int ml()
{
int i;
printf("|****************修改选项子菜单****************|\n");
printf("|----------------------------------------------|\n");
printf("| 1--修改姓名 |\n");
printf("| 2--修改地址 |\n");
printf("| 3--只修电话 |\n");
printf("| 0--退出修改 |\n");
printf("|----------------------------------------------|\n");
printf("请输入菜单项目0~3:");
do
{
scanf("%d",&i);
}
while (i<0||i>3);
return i;
}
//修改
SeqList *modify()
{
char name[10],a[10];
char address[30],b[10];
char c;
int no,j,n;
while(1)
{
switch(ml())
{
case 0:
return;
case 1:
printf("请输入你要修改的姓名\n");
scanf("%s",name);
for(j=0;j<L->length;j++)
{
if(strcmp(name,L->data[j].name)==0)
{
printf("你确定要修改这项吗?(y/n)");
fflush(stdin);
c=getchar();
if(c=='n')
{
printf("此项修改被取消!\n");
return 0;
}
if(c=='y')
{
printf("请输入修改后的姓名\n");
scanf("%s",a);
strcpy(L->data[j].name,a);
}
printf("恭喜您!信息已修改!\n");
}
}
break;
case 2:
printf("请输入你要修改的地址\n");
scanf("%s",address);
for(j=0;j<L->length;j++)
{
if(strcmp(address,L->data[j].address)==0)
{
printf("你确定要修改这项吗?(y/n)");
fflush(stdin);
c=getchar();
if(c=='n')
{
printf("此项修改被取消!\n");
return 0;
}
if(c=='y')
{
printf("请输入修改后的地址\n");
scanf("%s",b);
strcpy(L->data[j].address,b);
}
printf("恭喜您!信息已修改!\n");
}
}
break;
case 3:
printf("请输入你要修改的电话\n");
scanf("%d",&no);
for(j=0;j<L->length;j++)
{
if(no==L->data[j].no)
{
printf("你确定要修改这项吗?(y/n)");
fflush(stdin);
c=getchar();
if(c=='n')
{
printf("此项修改被取消!\n");
return 0;
}
if(c=='y')
{
printf("请输入修改后的电话\n");
scanf("%d",&n);
L->data[j].no=n;
}
printf("恭喜您!信息已修改!\n");
}
}
break;
}
}
return L;
}
//输出功能
SeqList *out_SeqList()
{
int i;
printf("姓名\t地址\t电话\t\n");
for(i=0;i<L->length;i++)
{
printf("%s\t",L->data[i].name);
printf("%s\t",L->data[i].address);
printf("%d\t",L->data[i].no);
printf("\n");
}
return L;
}
//主函数
int main()
{
SeqList *L=NULL;
L=init_SeqList(L);
a();
printf("\n\t\t 欢迎光临!\n\n");
while(1)
{
switch (menu_select())
{
case 0:
exit (0);
case 1:
append_SeqList(L);
break;
case 2:
Insert_SeqList(L);
break;
case 3:
Location_SeqList(L);
break;
case 4:
Delete_SeqList(L);
break;
case 6:
out_SeqList(L);
break;
case 5:
modify(L);
break;
case 7:
save(L);
break;
case 8:
open(L);
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -