PS :以下代码已完成升级,详情请见下一条博客
这是我写的第一个系统,100%个人设计与编码,没有参考任何系统代码,你们可以把它复制到你们的devc++上面玩一下
第三代通讯录主要增加了输入错误提示功能和优化了界面的操作。但代码里面还有一些没有用到的变量没有删除,我后续再补。
哈哈哈,第一次发这个东西好紧张,这是我用DevC++写的我的大一C语言作业,各位大人和行业大佬要是看到了不要笑话我。
//预计上线电话查找功能,性别分类功能,还有分页显示 还有简化一下代码
//真的累了,不想更新和优化这个系统了
//除非有打赏 微信号FYB15920223268 普通二本学生 江门
//该版本为分享版,网上开源分享,由于目前作业截止时间还没到,所以所有注释都被删除
//第三代系统新增了输入错误提示功能,优化了界面操作方式
//由于C语言的隐式类型转换输入的浮点数会自动转换成对应的整数 这个bug我改不掉
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct message
{
char name[50];
char remark[50];
char sex[50];
char workplace[50];
char address[50];
char phonenumber[50];
char relation[50];
}MES;
void checkcount(void);
void checkdata(void);
void desktop (void);
int count();
void addone(MES*pcontact);
void deleteone(MES*pcontact);
void download(MES*pcontact);
void upload(MES*pcontact);
void reset();
void tosee(MES*pcontact);
void lookfor(MES*pcontact);
void plusone();
void minusone();
void changemessage(MES*pcontact);
void checkcount()
{
FILE*me=fopen("exist1.txt","r");
if (me==NULL)
{
FILE*fp=fopen("exist1.txt","w+");
fputc('\0',fp);
rewind(fp);
fclose(fp);
} else fclose(me);
}
void checkdata()
{
FILE*me=fopen("userdata1.txt","r");
if (me==NULL)
{
FILE*fp=fopen("userdata1.txt","w+");
fclose(fp);
} else fclose(me);
}
void desktop ()
{
printf("*******************************************************************\n");
printf("** **\n");
printf("** 第三代通讯录管理系统 **\n");
printf("** **\n");
printf("** 1.添加联系人 2.删除联系人 **\n");
printf("** 3.查看通讯录 4.查找 **\n");
printf("** 5.更改通讯录 6.重置通讯录 **\n");
printf("** 7.退出程序 **\n");
printf("** **\n");
printf("** **\n");
printf("** 新用户首次使用时为避免与原电脑上的文件冲突建议按6重置一次 **\n");
printf("** **\n");
printf("** 温馨提示:第二次编译运行时请确保 **\n");
printf("** 第一次编译运行的终端已退出否则会报错 **\n");
printf("*******************************************************************\n");
}
int count()
{
FILE*fp=fopen("exist1.txt","r+");
rewind(fp);
int i;
char ch=fgetc(fp);
i=ch;
fclose(fp);
return i;
}
void addone(MES*pcontact)
{
char huiche[50]={0};
int cut,choice,wait,jixu;
cut=count();
loop2:
printf("正在执行新建联系人的操作\n");
printf("目前已经存了%d个联系人的信息\n",cut);
printf("正在进行第%d个联系人的信息存储\n",cut+1);
char*pname=(*(pcontact+cut)).name;
char*premark=(*(pcontact+cut)).remark;
char*psex=(*(pcontact+cut)).sex;
char*pworkplace=(*(pcontact+cut)).workplace;
char*paddress=(*(pcontact+cut)).address;
char*pphonenumber=(*(pcontact+cut)).phonenumber;
char*prelation=(*(pcontact+cut)).relation;
printf("请输入联系人的名字: ");
gets(pname);
while(strcmp(pname,huiche)==0)
{
printf("输入错误,请重新输入联系人的名字(不可以只输入回车): ");
gets(pname);
}
printf("请输入您给该联系人的备注: ");
gets(premark);
while(strcmp(premark,huiche)==0)
{
printf("输入错误,请重新输入联系人的备注(不可以只输入回车): ");
gets(premark);
}
printf("请输入该联系人的性别: ");
gets(psex);
while(strcmp(psex,huiche)==0)
{
printf("输入错误,请重新输入联系人的性别(不可以只输入回车): ");
gets(psex);
}
printf("请输入联系人的工作单位: ");
gets(pworkplace);
while(strcmp(pworkplace,huiche)==0)
{
printf("输入错误,请重新输入联系人的工作单位(不可以只输入回车): ");
gets(pworkplace);
}
printf("请输入联系人的邮箱地址: ");
gets(paddress);
while(strcmp(paddress,huiche)==0)
{
printf("输入错误,请重新输入联系人的邮箱地址(不可以只输入回车): ");
gets(paddress);
}
printf("请输入联系人的电话: ");
gets(pphonenumber);
while(strcmp(pphonenumber,huiche)==0)
{
printf("输入错误,请重新输入联系人的电话(不可以只输入回车): ");
gets(pphonenumber);
}
printf("请输入你和该联系人的关系:");
gets(prelation);
while(strcmp(prelation,huiche)==0)
{
printf("输入错误,请重新输入你和该联系人的关系(不可以只输入回车): ");
gets(prelation);
}
system("cls");
printf("根据您的填写,第%d位联系人的信息如下\n",cut+1);
printf("姓名:");
printf("%s\n",pname);
printf("备注:");
printf("%s\n",premark);
printf("性别:");
printf("%s\n",psex);
printf("工作单位:");
printf("%s\n",pworkplace);
printf("邮箱:");
printf("%s\n",paddress);
printf("电话:");
printf("%s\n",pphonenumber);
printf("关系:");
printf("%s\n",prelation);
printf("\n");
printf("上述信息是否有误,有误请按1重新填写,无误请按2进行保存>>>");
scanf("%d",&wait);
fflush(stdin);
while(wait!=1 && wait != 2)
{
printf("请按照提示输入规定的数字>>>");
scanf("%d",&wait);
fflush(stdin);
}
if (wait==1)
{
system("cls");
goto loop2;
}else plusone();
printf("\n");
printf("你还要继续编辑联系人的信息吗?\n");
printf("继续编辑请按1,退出请按2>>> ");
scanf("%d",&jixu);
fflush(stdin);
while(jixu!=1 && jixu!=2)
{
printf("请按照提示输入规定的数字>>>");
scanf("%d",&jixu);
fflush(stdin);
}
if (jixu==1)
{
system("cls");
addone(pcontact);
}else return;
}
void deleteone(MES*pcontact)
{
char tuichu;
MES temp={0};
int jixu,i,j,k=0,weiyi;
char arr[50]={0};
int confirm;
int cut,wait,remove;
char*pname=NULL;
char*premark=NULL;
char*psex=NULL;
char*pworkplace=NULL;
char*paddress=NULL;
char*pphonenumber=NULL;
char*prelation=NULL;
jump:
cut=count();
if (cut==0)
{
printf("目前已经没有联系人,无法进行联系人删除操作\n");
printf("请输入 回车 或者 任意键加回车 退出删除操作>>>");
tuichu=getchar();
return;
}
system("cls");
printf("正在执行删除联系人的操作\n");
printf("目前已经存了%d个联系人的信息\n",cut);
if (cut != 0)
{
printf("***************\n");
for (i=1;i<=cut;i++)
{
printf("NO.%d ",i);
printf("%s\n",(*(pcontact+i-1)).name);
}
printf("***************\n");
printf("如果您后悔了,不想执行删除操作可先选择联系人并在下一步操作返回桌面\n");
printf("请输入你要删除的联系人的数字编号 >>>");
scanf("%d",&remove);
fflush(stdin);
while(remove<0 || remove >cut)
{
printf("\n");
printf("目前已存%d位联系人的信息,无法对第%d位联系人的信息进行删除\n",cut,remove);
printf("请输入展示的联系人前面的序号进行删除操作>>>");
scanf("%d",&remove);
fflush(stdin);
}
printf("\n");
printf("即将执行删除第%d位联系人的操作,请您再次确认\n",remove);
printf("返回删除操作界面请按1 返回系统桌面请按2 确定删除请按3\n");
printf(">>>");
scanf("%d",&confirm);
fflush(stdin);
while (confirm!=1 && confirm!=2 && confirm!=3)
{
printf("请按照提示输入规定的数字>>>");
scanf("%d",&confirm);
fflush(stdin);
}
switch (confirm)
{
case 1 : goto jump;
case 2 : return;
case 3 : break;
}
pname=(*(pcontact+remove-1)).name;
premark=(*(pcontact+remove-1)).remark;
psex=(*(pcontact+remove-1)).sex;
pworkplace=(*(pcontact+remove-1)).workplace;
paddress=(*(pcontact+remove-1)).address;
pphonenumber=(*(pcontact+remove-1)).phonenumber;
prelation=(*(pcontact+remove-1)).relation;
strcpy(pname,arr);
strcpy(premark,arr);
strcpy(psex,arr);
strcpy(pworkplace,arr);
strcpy(paddress,arr);
strcpy(pphonenumber,arr);
strcpy(prelation,arr);
for (i=1;i<=cut;i++)
{
pname=(*(pcontact+i-1)).name;
weiyi=strcmp(pname,arr);
if (weiyi==0)
{
temp=*(pcontact+i-1);
*(pcontact+i-1)=*(pcontact+i);
*(pcontact+i)=temp;
}
}
minusone();
system("cls");
printf("你还要继续删除联系人的信息吗?\n");
printf("继续删除请按1,退出请按2: ");
scanf("%d",&jixu);
fflush(stdin);
while (jixu!=1 && jixu!=2)
{
printf("请按照提示输入规定的数字>>>");
scanf("%d",&jixu);
fflush(stdin);
}
if (jixu==1)
{
system("cls");
deleteone(pcontact);
}else return;
}
}
void download(MES*pcontact)
{
int i,j,k;
int cut;
cut=count();
char*pname=NULL;
char*premark=NULL;
char*psex=NULL;
char*pworkplace=NULL;
char*paddress=NULL;
char*pphonenumber=NULL;
char*prelation=NULL;
FILE*fp=fopen("userdata1.txt","r+");
rewind(fp);
for (i=1;i<=cut;i++)
{
pname=(*(pcontact+i-1)).name;
premark=(*(pcontact+i-1)).remark;
psex=(*(pcontact+i-1)).sex;
pworkplace=(*(pcontact+i-1)).workplace;
paddress=(*(pcontact+i-1)).address;
pphonenumber=(*(pcontact+i-1)).phonenumber;
prelation=(*(pcontact+i-1)).relation;
fscanf(fp,"%s %s %s %s %s %s %s\n",pname,premark,psex,pworkplace,paddress,pphonenumber,prelation);
}
rewind(fp);
fclose(fp);
}
void upload(MES*pcontact)
{
char*pname=NULL;
char*premark=NULL;
char*psex=NULL;
char*pworkplace=NULL;
char*paddress=NULL;
char*pphonenumber=NULL;
char*prelation=NULL;
int cut;
int i,j,k,m,n;
cut=count();
FILE*fp=fopen("userdata1.txt","w+");
for (i=1;i<=cut;i++)
{
pname=(*(pcontact+i-1)).name;
premark=(*(pcontact+i-1)).remark;
psex=(*(pcontact+i-1)).sex;
pworkplace=(*(pcontact+i-1)).workplace;
paddress=(*(pcontact+i-1)).address;
pphonenumber=(*(pcontact+i-1)).phonenumber;
prelation=(*(pcontact+i-1)).relation;
fprintf(fp,"%s %s %s %s %s %s %s\n",pname,premark,psex,pworkplace,paddress,pphonenumber,prelation);
}
fclose(fp);
}
void reset()
{
FILE*fp=fopen("exist1.txt","w+");
fputc('\0',fp);
rewind(fp);
fclose(fp);
FILE*me=fopen("userdata1.txt","w+");
fclose(me);
}
void tosee(MES*pcontact)
{
int cut,check,jixu,choice;
int i,j,k;
cut=count();
char*pname=NULL;
char*premark=NULL;
char*psex=NULL;
char*pworkplace=NULL;
char*paddress=NULL;
char*pphonenumber=NULL;
char*prelation=NULL;
system("cls");
chakan:
printf("正在查看通讯录\n");
if (cut != 0)
{
printf("*****************\n");
for (i=1;i<=cut;i++)
{
printf("NO.%d ",i);
printf("%s\n",(*(pcontact+i-1)).name);
}
printf("*****************\n");
}
printf("请输入你要查看的联系人的数字编号>> ") ;
scanf("%d",&check);
fflush(stdin);
while (check>cut)
{
printf("目前已保存%d位联系人的信息,无法对第%d位联系人进行查找\n",cut,check);
printf("请重新输入>>>");
scanf("%d",&check);
fflush(stdin);
}
pname=(*(pcontact+check-1)).name;
premark=(*(pcontact+check-1)).remark;
psex=(*(pcontact+check-1)).sex;
pworkplace=(*(pcontact+check-1)).workplace;
paddress=(*(pcontact+check-1)).address;
pphonenumber=(*(pcontact+check-1)).phonenumber;
prelation=(*(pcontact+check-1)).relation;
system("cls");
printf("正在查看通讯录\n");
printf("根据您的填写,第%d位联系人的信息如下\n",check);
printf("姓名:");
printf("%s\n",pname);
printf("备注:");
printf("%s\n",premark);
printf("性别:");
printf("%s\n",psex);
printf("工作单位:");
printf("%s\n",pworkplace);
printf("邮箱:");
printf("%s\n",paddress);
printf("电话:");
printf("%s\n",pphonenumber);
printf("关系:");
printf("%s\n",prelation);
printf("\n");
printf("输入1返回查看界面,输入2返回系统桌面\n");
printf(">>>");
scanf("%d",&choice);
fflush(stdin);
while(choice!=1 && choice!=2)
{
printf("请按照提示输入规定的数字>>>");
scanf("%d",&choice);
fflush(stdin);
}
switch(choice)
{
case 1: system("cls");
goto chakan;
case 2: return;
}
}
void plusone()
{
FILE*fp=fopen("exist1.txt","r+");
rewind(fp);
char ch=fgetc(fp);
fclose(fp);
ch+=1;
FILE*me=fopen("exist1.txt","w+");
fputc(ch,me);
rewind(me);
fclose(me);
}
void minusone()
{
FILE*fp=fopen("exist1.txt","r+");
rewind(fp);
char ch=fgetc(fp);
fclose(fp);
ch-=1;
FILE*me=fopen("exist1.txt","w+");
fputc(ch,me);
rewind(me);
fclose(me);
}
void lookfor(MES*pcontact)
{
char huiche[50]={0};
char ch;
int cut=count();
int i,j=-1,k,wait,fanhui;
char*pname=NULL;
char*premark=NULL;
char*psex=NULL;
char*pworkplace=NULL;
char*paddress=NULL;
char*pphonenumber=NULL;
char*prelation=NULL;
char arr[50];
fchazhao:
printf("正在执行联系人查找操作\n");
printf("请输入您要查找的联系人的姓名:");
gets(arr);
while(strcmp(arr,huiche)==0)
{
printf("请输入您要查找的联系人的姓名(而不是回车),谢谢 :");
gets(arr);
}
for(i=1;i<=cut;i++)
{
pname=(*(pcontact+i-1)).name;
if (strcmp(pname,arr)==0)
{
k=i-1;
j=1;
break;
}
}
if (j==1)
{
pname=(*(pcontact+k)).name;
premark=(*(pcontact+k)).remark;
psex=(*(pcontact+k)).sex;
pworkplace=(*(pcontact+k)).workplace;
paddress=(*(pcontact+k)).address;
pphonenumber=(*(pcontact+k)).phonenumber;
prelation=(*(pcontact+k)).relation;
printf("根据您输入的信息,已为您找到该联系人,信息如下\n");
printf("姓名:");
printf("%s\n",pname);
printf("备注:");
printf("%s\n",premark);
printf("性别:");
printf("%s\n",psex);
printf("工作单位:");
printf("%s\n",pworkplace);
printf("邮箱:");
printf("%s\n",paddress);
printf("电话:");
printf("%s\n",pphonenumber);
printf("关系:");
printf("%s\n",prelation);
printf("\n");
printf("输入1返回查找界面,输入2返回系统桌面>>>");
scanf("%d",&fanhui);
fflush(stdin);
while(fanhui!=1 && fanhui!=2)
{
printf("请按照提示输入规定的数字>>>");
scanf("%d",&fanhui);
fflush(stdin);
}
switch(fanhui)
{
case 1: system("cls");
goto fchazhao;
break;
case 2: return;
}
}else{
printf("对不起,无法找到该联系人的信息\n");
printf("您可以进行如下选择 按1重新输入姓名查找,按2退出 >>>");
scanf("%d",&wait);
fflush(stdin);
while(wait!=1 && wait!=2)
{
printf("请按照提示输入规定的数字>>>");
scanf("%d",&wait);
fflush(stdin);
}
if (wait==1)
{
system("cls");
lookfor(pcontact);
}
if(wait==2)
return;
}
}
void changemessage(MES*pcontact)
{
char huiche[50]={0};
int cut,change,wait,jixu;
int choice;
int i,j,k;
cut=count();
char*pname=NULL;
char*premark=NULL;
char*psex=NULL;
char*pworkplace=NULL;
char*paddress=NULL;
char*pphonenumber=NULL;
char*prelation=NULL;
genggai:
system("cls");
printf("正在执行通讯录信息更改操作\n");
printf("***************************\n");
if (cut != 0)
{
for (i=1;i<=cut;i++)
{
printf("NO.%d ",i);
printf("%s\n",(*(pcontact+i-1)).name);
}
}
printf("***************************\n");
printf("请输入你要更改的联系人的数字编号>> ") ;
scanf("%d",&change);
fflush(stdin);
while(change>cut)
{
printf("请您输入界面上显示的联系人的序号,谢谢>>>");
scanf("%d",&change);
fflush(stdin);
}
printf("\n");
printf("即将对第%d位联系人的信息进行改写,请您重新确认\n",change);
printf("返回更改界面请按1 返回系统桌面请按2 确认改写请按3\n");
printf(">>>");
scanf("%d",&choice);
fflush(stdin);
while(choice!=1 && choice!=2 && choice!=3)
{
printf("请按照提示输入规定的数字>>>");
scanf("%d",&choice);
fflush(stdin);
}
switch(choice)
{
case 1 : goto genggai;
break;
case 2 : return;
case 3 : break;
}
system("cls");
pname=(*(pcontact+change-1)).name;
premark=(*(pcontact+change-1)).remark;
psex=(*(pcontact+change-1)).sex;
pworkplace=(*(pcontact+change-1)).workplace;
paddress=(*(pcontact+change-1)).address;
pphonenumber=(*(pcontact+change-1)).phonenumber;
prelation=(*(pcontact+change-1)).relation;
loopm:
printf("正在改写第%d位联系人的信息\n",change);
printf("**************************\n");
printf("该联系人的初始名字是:");
printf("%s\n",pname);
printf("请重新输入联系人的名字: ");
gets(pname);
while(strcmp(pname,huiche)==0)
{
printf("输入错误,请重新输入联系人的名字(不可以只输入回车): ");
gets(pname);
}
printf("\n");
printf("该联系人的初始备注是:");
printf("%s\n",premark);
printf("请重新输入联系人的备注: ");
gets(premark);
while(strcmp(premark,huiche)==0)
{
printf("输入错误,请重新输入联系人的备注(不可以只输入回车): ");
gets(premark);
}
printf("\n");
printf("该联系人的初始性别是:");
printf("%s\n",psex);
printf("请重新输入联系人的性别: ");
gets(psex);
while(strcmp(psex,huiche)==0)
{
printf("输入错误,请重新输入联系人的性别(不可以只输入回车): ");
gets(psex);
}
printf("\n");
printf("该联系人的初始工作单位是:");
printf("%s\n",pworkplace);
printf("请重新输入联系人的工作单位: ");
gets(pworkplace);
while(strcmp(pworkplace,huiche)==0)
{
printf("输入错误,请重新输入联系人的工作单位(不可以只输入回车): ");
gets(pworkplace);
}
printf("\n");
printf("该联系人的初始邮箱地址是:");
printf("%s\n",paddress);
printf("请重新输入联系人的邮箱地址: ");
gets(paddress);
while(strcmp(paddress,huiche)==0)
{
printf("输入错误,请重新输入联系人的邮箱地址(不可以只输入回车): ");
gets(paddress);
}
printf("\n");
printf("该联系人的初始电话是:");
printf("%s\n",pphonenumber);
printf("请重新输入联系人的电话: ");
gets(pphonenumber);
while(strcmp(pphonenumber,huiche)==0)
{
printf("输入错误,请重新输入联系人的电话(不可以只输入回车): ");
gets(pphonenumber);
}
printf("\n");
printf("你和该联系人的初始关系是:");
printf("%s\n",prelation);
printf("请重新输入你和该联系人的关系:");
gets(prelation);
while(strcmp(prelation,huiche)==0)
{
printf("输入错误,请重新输入联系人的电话(不可以只输入回车): ");
gets(prelation);
}
system("cls");
printf("根据您的填写,第%d位联系人的信息更改后如下\n",change);
printf("姓名:");
printf("%s\n",pname);
printf("备注:");
printf("%s\n",premark);
printf("性别:");
printf("%s\n",psex);
printf("工作单位:");
printf("%s\n",pworkplace);
printf("邮箱:");
printf("%s\n",paddress);
printf("电话:");
printf("%s\n",pphonenumber);
printf("关系:");
printf("%s\n",prelation);
printf("上述信息是否有误,有误请按1重新填写,无误请按2进行保存:");
scanf("%d",&wait);
fflush(stdin);
while(wait!=1 && wait != 2)
{
printf("请按照提示输入规定的数字>>>");
scanf("%d",&wait);
fflush(stdin);
}
if (wait==1)
{
system("cls");
goto loopm;
}
if(wait==2) upload(pcontact);
system("cls");
printf("你还要继续更改联系人的信息吗?\n");
printf("继续更改请按1,退出请按2: ");
scanf("%d",&jixu);
fflush(stdin);
while(jixu!=1 && jixu != 2)
{
printf("请按照提示输入规定的数字>>>");
scanf("%d",&jixu);
fflush(stdin);
}
if (jixu==1)
{
system("cls");
changemessage(pcontact);
}else return;
}
int main()
{
int choice;
int cut1,cut2,cut3,cut4;
char ch01,ch02,ch03,ch04;
MES contact[100]={0};
MES*pcontact=contact;
loop:
download(pcontact);
desktop();
printf("操作方式为:输入规定按键后按回车确认\n");
printf("请输入正确的数字以进入正确的功能>>> ");
checkcount();
checkdata();
scanf("%d",&choice);
fflush(stdin);
while(choice!=1&&choice!=2&&choice!=3&&choice!=4&&choice!=5&&choice!=6&&choice!=7)
{
printf("请您输入数字1~7的整数>>>");
scanf("%d",&choice);
fflush(stdin);
}
switch (choice)
{
case 1 : system("cls");
addone(pcontact);
upload(pcontact);
system("cls");
goto loop;
case 2 : cut1=count();
if (cut1 != 0)
{
deleteone(pcontact);
upload(pcontact);
}else {
system("cls");
printf("您目前还没有存入联系人的信息呢,所以无法进行联系人的删除操作\n");
printf("请按回车返回桌面>>>");
ch01=getchar();
fflush(stdin);
}
system("cls");
goto loop;
case 3 : cut2=count();
if (cut2 != 0)
{
tosee(pcontact);
}else {
system("cls");
printf("您目前还没有存入联系人的信息呢,所以无法进行查看联系人的操作\n");
printf("请按回车返回桌面>>>");
ch02=getchar();
fflush(stdin);
}
system("cls");
goto loop;
case 4 : cut3=count();
if (cut3 != 0)
{
system("cls");
lookfor(pcontact);
}else {
system("cls");
printf("您目前还没有存入联系人的信息呢,所以无法进行查找联系人的操作\n");
printf("请按回车返回桌面>>>");
ch03=getchar();
fflush(stdin);
}
system("cls");
goto loop;
case 5: cut4=count();
if (cut4 != 0)
{
system("cls");
changemessage(pcontact);
}else {
system("cls");
printf("您目前还没有存入联系人的信息呢,所以无法进行更改联系人信息的操作\n");
printf("请按回车返回桌面>>>");
ch04=getchar();
fflush(stdin);
}
system("cls");
goto loop;
case 6 : reset();
system("cls");
printf("数据重置成功,请按回车返回桌面>>");
char chh=getchar();
system("cls");
goto loop;
case 7: system("cls");
printf("程序已结束,祝您身体健康,天天开心\n");
break;
}
return 0;
}