//-------------------------------------同学录-----------------------------------------------
/*
程序描述:本同学录系第一个版次,用于记录一个班的同学的详细信息,方便同学之间的联系与增进友谊;
程序总结:对于排序算法,我是想了一天也没有想出来,以后有机会看到是,一定要注意,最好能背出来;
制作日期:2008年九月的最后一天;
制作地点:兰交大2#316;
*/
//-------------------------------------By Frank----------------------------------------------
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define N sizeof(Stu)
#define M "请输入任意非特殊字符回到主菜单"
typedef struct
{
int year;
int month;
int day;
}BirthDay; //定义生日结构
typedef struct
{
char name[10];
char sex[4];
BirthDay date;
char addr[20];
char telephone[15];
char other[10];
}Student; //定义学生实体
typedef struct Stu
{
Student data;
struct Stu *next;
}; //定义结点
Stu *Initsub(Stu *); //初始化函数
Stu *Create(Stu *); //输入函数
Stu *Add(Stu *); //添加记录函数
Stu *Sort(Stu *); //排序函数
Stu *Reset(Stu *); //修改记录函数
Stu *Del(Stu *); //删除记录函数
Stu *DelAll(Stu *); //删除全部记录
void Output(Stu *); //输出记录函数
void Look(Stu *); //查找记录函数
void Save(Stu *); //保存记录函数
void Backup(Stu *); //备份文件函数
void over(Stu *); //退出程序函数
int menu(); //主菜单函数
int saved=0,backuped=0; //用于记录是否保存与备份
void main() //主函数
{
Stu *pstr;
while(1)
{
switch(menu())
{
case 1://输入记录
pstr=Initsub(pstr);
pstr=Create(pstr);
break;
case 2://输出记录
Output(pstr);
break;
case 3://添加记录
pstr=Add(pstr);
break;
case 4://修改记录
pstr=Reset(pstr);
break;
case 5://删除记录
pstr=Del(pstr);
case 6://记录排序
pstr=Sort(pstr);
break;
case 7://记录查找
Look(pstr);
break;
case 8://删除全部记录
DelAll(pstr);
break;
case 9://保存文件
Save(pstr);
break;
case 10://备份文件
Backup(pstr);
break;
case 11://退出程序
over(pstr);
break;
}
}
}
int menu() //在屏幕中央显示一个菜单
{
char *str1=" ";
char *str2="******************\n";
int option;//返回结果
system("cls");
printf("%s",str1);
printf("%s",str2);
printf("%s",str1);
printf("1.请输入记录\n");
printf("%s",str1);
printf("2.输出全部记录\n");
printf("%s",str1);
printf("3.添加记录\n");
printf("%s",str1);
printf("4.修改记录\n");
printf("%s",str1);
printf("5.删除记录\n");
printf("%s",str1);
printf("6.记录排序\n");
printf("%s",str1);
printf("7.记录查找\n");
printf("%s",str1);
printf("8.删除全部记录\n");
printf("%s",str1);
printf("9.记录保存\n");
printf("%s",str1);
printf("10.记录文件备份\n");
printf("%s",str1);
printf("11.退出程序\n");
printf("%s%s%s",str1,str2,str1);
printf("请选择:");
scanf("%d",&option);
return option;
}
Stu *Initsub(Stu *head) //初始化
{
head=(Stu *)malloc(N);
head->next=NULL;
return head;
}
Stu *Create(Stu *p)//记录输入开始
{
char str[5],ch[2];
Stu *head,*r,*s;
system("cls");
head=p;
r=head;
do
{
s=(Stu *)malloc(N);
printf("请输入姓名:");
scanf("%s",s->data.name);
printf("请输入性别:");
scanf("%s",s->data.sex);
printf("请输入生日(格式为:yy/mm/dd):");
scanf("%d/%d/%d",&s->data.date.year,&s->data.date.month,&s->data.date.day);
printf("请输入住址:");
scanf("%s",s->data.addr);
printf("请输入联系方式:");
scanf("%s",s->data.telephone);
printf("请输入备注信息:");
scanf("%s",s->data.other);
r->next=s;
r=r->next;
printf("Continue Or Not?(Y/N):");
scanf("%s",ch);
}while(!strcmp(ch,"y") || !strcmp(ch,"Y"));
r->next=NULL;
printf("记录输入完毕!\n");
printf(M);
scanf("%s",str);
return p;
}
void Output(Stu *head)
{
char str[5];
Stu *p=head->next;
system("cls");
printf("姓名 性别 生日 住址 联系方式 备注信息\n");
while(p!=NULL)
{
printf("%-10s%-6s%-4d/%d/%-4d%-20s%-21s%-20s\n",p->data.name,p->data.sex,p->data.date.year,p->data.date.month,p->data.date.day,p->data.addr,p->data.telephone,p->data.other);
p=p->next;
}
printf("数据输出完毕!\n");
printf(M);
scanf("%s",str);
}
Stu *Add(Stu *head) //添加记录
{
char str[5];
Stu *p,*r,*s;
system("cls");
p=head->next;
r=head;
s=(Stu *)malloc(N);
printf("请输入姓名:");
scanf("%s",s->data.name);
printf("请输入性别:");
scanf("%s",s->data.sex);
printf("请输入生日(yy/mm/dd):");
scanf("%d/%d/%d",&s->data.date.year,&s->data.date.month,&s->data.date.day);
printf("请输入地址:");
scanf("%s",s->data.addr);
printf("请输入联系方式:");
scanf("%s",s->data.telephone);
printf("请输入备注信息:");
scanf("%s",s->data.other);
while(p!=NULL && strcmp(s->data.name,p->data.name)>0)
{
r=p;
p=p->next;
}
s->next=r->next;
r->next=s;
printf("数据添加成功!\n");
printf(M);
scanf("%s",str);
return head;
}
Stu *Reset(Stu *head) //修改记录
{
Stu *p;
char name[10];
p=head->next;
system("cls");
printf("请输入要修改者的姓名:");
scanf("%s",name);
while(p!=NULL && strcmp(p->data.name,name))
p=p->next;
if(p==NULL)
{
printf("没有找到%s的信息!\n",name);
printf(M);
scanf("%s",name);
return head;
}
printf("请输入修改者的性别:");
scanf("%s",p->data.sex);
printf("请输入修改者的生日(yy/mm/dd):");
scanf("%d/%d/%d",&p->data.date.year,&p->data.date.month,&p->data.date.day);
printf("请输入修改者的住址:");
scanf("%s",p->data.addr);
printf("请输入修改者的联系方式:");
scanf("%s",p->data.telephone);
printf("请输入修改者的备注信息:");
scanf("%s",p->data.other);
printf("\n修改记录成功!\n");
printf(M);
scanf("%s",name);
return head;
}
Stu *Del(Stu *head) //删除记录
{
Stu *p,*r;
char name[10],ch[2];
system("cls");
p=head->next;
r=head;
printf("请输入要删除者的姓名:");
scanf("%s",name);
while(p!=NULL && strcmp(p->data.name,name))
{
r=p;
p=p->next;
}
if(p==NULL)
{
printf("没有找到%s的信息!\n",name);
printf(M);
scanf("%s",name);
return head;
}
printf("您确定要删除%s的信息吗?(Y/N):",name);
scanf("%s",ch);
if(strcmp(ch,"y")==0 || strcmp(ch,"Y")==0)
{
r->next=p->next;
free(p);
printf("记录已经成功删除!\n");
printf(M);
scanf("%s",name);
}
else
{
printf(M);
scanf("%s",name);
}
return head;
}
Stu *Sort(Stu *head)//对记录进行排序
{
Stu *p,*q,*r;
char ch[2];
system("cls");
p=head->next;
if(p!=NULL)
{
r=p->next;
p->next=NULL;
p=r;
while(p!=NULL)
{
r=p->next;
q=head;
while(q->next!=NULL && strcmp(q->next->data.name,p->data.name)<0)
q=q->next;
p->next=q->next;
q->next=p;
p=r;
}
}
printf("记录排序已经完成!\n");
printf(M);
scanf("%s",ch);
return head;
}
Stu *DelAll(Stu *head)//删除全部记录
{
Stu *p,*q;
char password[10],ch[2];
system("cls");
printf("您确定要删除全部记录吗?(Y/N):");
scanf("%s",ch);
if(strcmp(ch,"y")==0 || strcmp(ch,"Y")==0)
{
printf("请输入管理员密码:");
scanf("%s",password);
if(strcmp(password,"hezhong")==0)
{
p=head;
q=head->next;
while(p->next!=NULL)
{
free(p);
p=q;
q=q->next;
}
free(q);
free(p);
printf("记录已经全部删除!\n");
}
}
printf(M);
scanf("%s",ch);
return head;
}
void Look(Stu *head)//查找记录
{
Stu *p=head->next;
char name[10];
system("cls");
printf("请输入您要查找者的姓名:");
scanf("%s",name);
while(p!=NULL && strcmp(name,p->data.name))
p=p->next;
if(p==NULL)
{
printf("%s的信息没有找到!\n",name);
pri
同学通讯录 用C语言写的(有不足的地方请指教)(我的邮箱:[email protected])
需积分: 10 101 浏览量
2008-12-11
17:49:15
上传
评论
收藏 37KB RAR 举报