凑乎着改一改用吧
要求
1内容包括姓名单位电话等 记录个数为N(N大于10)
2该系统具有对记录的增加 删除 修改 和查询等功能
3为进入该系统设计一个口令 以自己学号为口令 输入3次不正确 不能进入
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LEN sizeof(struct addbook)
#define MAX 100
void InitDialBook(void);
void UserInterface(void);
void Load(void);
void Add(void);
void Find(void);
void Modify(void);
void Delete(void);
void ShowAll(void);
void Save(void);
struct addbook{
int record;
char name[15];
char sex[4];
char age[4];
char addr[20];
char phone[15];
char qq[15];
char meg[40];
struct addbook *link;
};
FILE *fp;
struct addbook *p,*p1,*head,*s,*t;
main()
{
int flag;
int choice;
if((fp = fopen("zzxx.txt","rb"))==NULL)
{ clrscr();
printf("\n\n\t\t\t文件不存在!\n");
if((fp = fopen("zzxx.txt","wb"))==NULL)
{
printf("文件打开错误!\n");
getch();
exit(0);
}
}
if(fgetc(fp)==-1)
{
printf("\n\t\t通讯录里没有信息,现在您必须添加信息.\n");
InitDialBook();
printf("\n\t\t\t添加成功!\n");
printf("\n\t\t您若想添加更多人的信息需请重新打开程序\n");
getch();
exit(0);
}
rewind(fp);
Load();
fclose(fp);
flag = 1;
while(flag)
{
UserInterface();
printf("请输入您的选择:(0-5):");
scanf("%d",&choice);
getchar();
if(choice>=0&&choice<6)
{
switch(choice)
{
case 1:
Add();break;
case 2:
Find();break;
case 3:
ShowAll();break;
case 4:
Delete();break;
case 5:
Modify();break;
case 0:
flag = 0;
clrscr();
printf("\n\n\n\t\t\t谢谢使用本通讯录系统!!!");
printf("\n\n\t\t如果你在使用过程中有什么要求或建议请连系:");
printf("\n\n\t\t\tzzxx2001@126.com或QQ:279252614");
getch();
break;
}
}
else{
printf("输入错误,请重新选择!\n");
}
}
fp = fopen("zzxx.txt","wb");
Save();
fclose(fp); clrscr();
printf("\n\n\n\t\t\t按任意键退出!\n");
getch();
return 0;
}
void InitDialBook(void)
{
p->record = 1;
printf("\n\n\t\t请输入姓名:");
gets(p->name);
printf("\n\t\t请输入性别:");
gets(p->sex);
printf("\n\t\t请输入年龄:");
gets(p->age);
printf("\n\t\t请输入地址:");
gets(p->addr);
printf("\n\t\t请输入电话:");
gets(p->phone);
printf("\n\t\t请输入QQ号码:");
gets(p->qq);
printf("\n\t\t请输入个性签名:");
gets(p->meg);
p->link = NULL;
head = p;
fwrite(p,LEN,1,fp);
fclose(fp);
}
void UserInterface(void)
{ clrscr();
printf("\n\t\t********************************************\n");
printf("\t\t\t欢迎使用通讯录管理系统");
printf("\n\t\t********************************************\n");
printf("\n\n\t\t\t******请选择你的操作******\n");
printf("\t\t\t +-------------------------------+");
printf("\t\t\t\t\t\t | 1 增加个人信息 |\n");
printf("\t\t\t | 2 查找信息(包含删除\修改信息) |\n");
printf("\t\t\t | 3 显示所有信息 |\n");
printf("\t\t\t | 4 删除信息 |\n");
printf("\t\t\t | 5 修改信息 |\n");
printf("\t\t\t | 0 退出和保存 |\n");
printf("\t\t\t +-------------------------------+\n");
printf("\n\n\t注意!!输入数字(电话号码或QQ)要在英文状态下,中文状态无法输入!!\n\n");
}
void Load(void)
{
fread(head,LEN,1,fp);
p = head;
while(p->link!=NULL){
p1 = (struct addbook*)malloc(LEN);
p1 = p->link;
fread(p1,LEN,1,fp);
p = p->link;
}
}
void Add(void)
{
p1 = (struct addbook*)malloc(LEN);
p1->record = p->record + 1; clrscr();
printf("\n\n\t\t\t-------------------------------------------\n");
printf("\t\t\t\t\t请输入信息\n");
printf("\t\t\t-------------------------------------------\n");
printf("\n\t\t\t这是第%d位成员",p->record+1);
printf("\n\t\t\t请输入姓名:");
gets(p1->name);
printf("\n\t\t\t请输入性别:");
gets(p1->sex);
printf("\n\t\t\t请输入年龄:");
gets(p1->age);
printf("\n\t\t\t请输入地址:");
gets(p1->addr);
printf("\n\t\t\t请输入电话:");
gets(p1->phone);
printf("\n\t\t\t请输入QQ号码:");
gets(p1->qq);
printf("\n\t\t\t请输入个性签名:");
gets(p1->meg);
p1->link = NULL;
p->link = p1;
p = p1;
}
void ShowAll(void)
{
s = head;
clrscr();
printf("\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" \t序号 姓名 性别 年龄 地址 电话 QQ号码 个性签名");
printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
do{
printf("\t %-6d%-10s%-8s%-7s%-10s%-10s%-s%-s\n",s->record,s->name,s->sex,
s->age,s->addr,s->phone,s->qq,s->meg);
s = s->link;
}while(s!=NULL);
printf("\n\n\n\t\t\t按任意键退出!");
getch();
return;
}
void Find(void)
{
char c;
struct addbook who;
s = head;
clrscr();
printf("\n\t\t请输入要查找人的姓名:");
gets(who.name);
while((s->link!=NULL)&&(strcmp(s->name,who.name)))
{
s = s->link;
}
if((s->link==NULL)&&(strcmp(s->name,who.name)))
{
printf("\"%s\" 不存在!\n",who.name);
printf("请查对一下姓名再查找.\n");
getch();
return;
}
clrscr();
printf("\n\t\t\t\要查找的资料如下所示:\n");
printf("\n******************************************************\n");
printf("\t 序号 姓名 性别 年龄 地址 电话 QQ号码 个性签名");
printf("\n******************************************************\n");
printf("\t %-6d%-10s%-8s%-7s%-8s%-10s%-s%-s\n",s->record,s->name,s->sex,s->age,s->age,
s->addr,s->phone,s->qq,s->meg);
printf("\n\t\t删除(d)\修改(m)\浏览一下(s)\n");
printf("\n\t请输入您的选择(d/m/s):");
scanf("%c",&c);
switch(c)
{
case 'D':
case 'd':Delete();break;
case 'M':
case 'm':Modify();break;
}
}
void Modify(void)
{ getchar();
printf("\n\t\t请输入新的姓名:");
gets(s->name);
printf("\n\t\t请输入新的性别:");
gets(s->sex);
printf("\n\t\t请输入新的年龄:");
gets(s->age);
printf("\n\t\t请输入新的地址:");
gets(s->addr);
printf("\n\t\t请输入新的电话:");
gets(s->phone);
printf("\n\t\t请输入新的QQ号码:");
gets(s->qq);
printf("\n\t\t请输入新的个性签名:");
gets(s->meg);
printf("\n\t\t修改成功!\n");
getch();
}
void Delete(void)
{
int find_prev;
int find_record;
char del;
char del_member_name[15];
struct addbook *p_del_prev;
strcpy(del_member_name,s->name);
getchar();
printf("确定要删除%s吗(Y/N)?",del_member_name);
scanf("%c",&del);
if(del=='n'||del=='N')
{
return;
}
find_prev = s->record - 1;
find_record = 1;
p_del_prev = head;
while((p_del_prev->link!=NULL)&&(find_record<find_prev))
{
p_del_prev = p_del_prev->link;
find_record++;
}
if(s->record==1)
{
if(s->link!=NULL)
{
head = head->link;
s = head;
while(s!=NULL)
{
s->record = s->record - 1;
s = s->link;
}
printf("%d,%s",p->record,p->name);
}
else if(s->link==NULL){
p = NULL;
head = p;
if(remove("zzxx.txt")==0){
printf("您已经删除了最后一位成员,通讯录已经清空!\n");
printf("所以,您必须重新建立通讯录!\n");
printf("重新打开程序去建立.\n");
}
printf("\n\n\t\t按任意键退出.\n");
getch();
exit(0);
}
}
else if(s->record==p->record){
p_del_prev->link = NULL;
s->link = NULL;
p = p_del_prev;
}
else{
p_del_prev->link = s->link;
s->link = NULL;
while(p_del_prev->link!=NULL)
{
p_del_prev = p_del_prev->link;
p_del_prev->record = p_del_prev->record -1;
}
printf("%d\n%d\n",p->record,p->link);
}
printf("成员 \"%s\" 已经被删除.\n ",del_member_name);
getch();
}
void Save(void)
{
s = head;
do{
fwrite(s,LEN,1,fp);
s = s->link;
}while(s!=NULL);
}