西 安 邮 电 学 院
高级语言课程设计
实验报告
系 别:电 信 系
专业班级:科技0701班
学 号:
班内序号:07
姓 名:
指导老师:黄 茹
实验课题:学生通讯信息管理系统
实验时间:20##.6.10~20##.6.20
20##年6月17日
一、实验目的
1. 熟悉C语言的编译,链接和运行过程;
2. 掌握C语言的数据类型,熟悉整型、实型、字符型变量的定义方式及如何给它们赋值,掌握不同的类型数据之间的赋值规律,赋值使用方法;
3. 掌握if语句及switch语句的运用方法及嵌套应用方法;
4. 掌握实现循环结构的三种语句while、 do-while.、for 的使用;
5. 掌握C语言函数的定义,声名及调用方法和调用过程;
6. 掌握C语言主函数和被调用函数之间的参数传递方式,学会函数的嵌套调用和递归调用的过程和方法;
7. 掌握数组的定义,赋值引用及输入输出方法,并正确用字符数组储存字符串,学会字符串的使用;
8. 掌握结构体类型变量的定义和使用;
9. 掌握指针变量和指向指针的指针变量的定义及使用,进一步了解指向结构体数组的指针变量的概念及使用方法;
10. 掌握链表的概念及链表的操作,并理解链表与数组的不同点及优缺点;
11. 掌握文件和文件指针的定义及文件建立,打开,关闭,读写等的操作方法
12. 能够采用模块化思想调试程序;
二.实验内容
1. 编写程序并进行调试运行;
2. 输入学生通讯信息并保存于文件,每个学生包含信息如:序号,姓名,省份,电话,生日,邮编,大学,班级,QQ号信息;
3. 对已存入的学生信息进行更新操作,包括添加一个学生信息、删除某个学生信息和修改某个学生信息;
4. 通过输入姓名,学号的方式查询学生信息;
5. 可以通过省份,生日来统计通讯信息;
6. 最后输出学生信息,供需要时打印。
一、 需求分析
1. 该程序可用于对学生的通讯方式基本信息的存储、更新、查询、输出等操作,以实现对学生通讯录信息的管理,便于同学之间的联系交往;
2. 其中更新功能包括:添加信息,删除信息,修改信息,可根据需要添加一个或多个学生信息,也可针对个别学生信息进行适当的删除或修改,以便随时更新学生通讯信息。
3. 程序中设计的查询功能可根据需要从若干数据中查询某个学生信息,并且可根据两种不同的方法查询:按姓名查询和按电话查询,以满足不同的需要;
4. 可以通过输出的方式查看整个通讯录;
5. 可以通过排序的方式查看同学生日的先后。
四、概要设计
1、方案设计
对系统进行分析,给出结构图
分析:系统要实现许多功能,因此遵循结构化程序设计思想来进行本系统的设计:—,自顶向下逐步细化,将系统设计任务分解出许多子功能模块来计;
结构图如下:
2 . 模块功能说明
对各个模块进行功能的描述
(1).输入模块:
录入需要管理的通讯信息并将信息保存于文件中,以方便日后进行打印、读取、更新等操作。
(2).添加模块:
可添加一个或多个学生的通讯信息,并将所添加的信息保存,方便查找。
(3).删除模块:
可对失去联系的学生通讯信息做删除处理。
(4).修改模块:
可对通讯信息发生改变的学生信息进行修改。
(5).查询模块:
可对已建立的学生通讯信息进行查询,并且可根据需要选择按姓名查询或按电话查询。
(6).保存模块:
用于对通讯信息进行保存。
(7).输出模块:
将所有学生通讯信息或想要查询的学生信息显示于屏幕,用于打印学生通讯信息或查找某些学生通讯信息。
(8).退出系统:
选择该项,自动退出该系统。
五、详细设计及运行结果
流程图, 函数之间相互调用的图示 ,程序设计及编码, 运行结果。
六.调试情况及运行结果
1.对自己设计进行评价,指出合理和不足之处,提出改进的方案。
此次实践课编写的是一个应用程序,相对于以前我们见到的程序,它要大得多,运行的结果也没有预想中的好,数据的输出格式不太规范,而且各模块也出现了一些小问题,在同学们的帮助下,我很有耐心的一次又一次的进行修改,最后运行的结果基本上达到了预期的目的。可着毕竟是第一次独立完成这样的大程序,结果还不是太理想。
由于时间很短,在选题报告中设想到的好多功能都没有实现。已有的那些功能虽已能基本上满足用户的需要,但如果还有更多的功能程序就会更加完美。如:再录入数据时,没有设计数据输入出错的提示。
2.在设计过程中的感受。
本次C 语言的实习课让我对C 语言的学习又有了更深入的了解,也让我更深刻地领悟到了“实践出真理”这个道理,在上机实践过程中学到的知识远远超过了在课堂上十几周学到的,学校组织的这次实习让我们这些实践知识匮乏的大学生增添了许多社会经验,为我们将来走上工作岗位其了不小的铺垫作用。
本次实习中遇到了很多以前没有遇到过的问题,也曾想过要放弃,但看到那些同学都在那认真的写程序,给了我继续的信心。在同学的帮助下,我顺利的结束了本次实习,让我知道原来凭借自己努力取得的成功会让自己这么欣慰,也让我知道了友谊和团结的重要性。并且,通过一种题材两中方式的学习,我掌握了更多的知识,也认识到对比学习的重要性。
七.参考文献
八。附录:
1. 链表方式:
#include
#include
#define N sizeof(struct stud)
#include
#include
#include
/*日期结构体类型*/
struct date
{int y;
int m;
int d;
}bir;
/*学生信息结构体类型*/
struct stud
{
int num; /*序号*/
char name[20]; /*姓名*/
char tel[40]; /*电话*/
char addr[40]; /*省份*/
char yb[20]; /*邮编*/
char daxue[50]; /*大学*/
struct date bir; /*生日*/
struct stud *next;
};
char a;
struct stud *h;
FILE *fp;
/*建立链表*/
struct stud *creat()
{ int i,k;
struct stud *p1,*p2,*head;
printf("\n请输入学生数:\n");
scanf("%d",&k);
head=NULL;
head=p1=p2=(struct stud *)malloc(N); /*head,p1,p2指向首结点*/
for(i=0;i
{p1=(struct stud *)malloc(N); /*p1指向新申请的结点*/
printf("\n请输入序号:");
scanf("%d",&p1->num);
printf("\n请输入姓名:");
scanf("%s",p1->name);
printf("\n请输入电话:");
scanf("%s",p1->tel);
printf("\n请输入籍贯:");
scanf("%s",p1->addr);
printf("\n请输入邮编:");
scanf("%s",p1->yb);
printf("\n请输入大学:");
scanf("%s",p1->daxue);
printf("\n请输入出生日期:(年-月-日)");
scanf("%d-%d-%d",&p1->bir.y,&p1->bir.m,&p1->bir.d);
p2->next=p1; /*将新结点链接到表尾*/
p2=p1; /*p2指向新的表尾*/
}
p2->next=NULL;
head=head->next; /*头指针后移*/
save_message(head); /*立即保存*/
return head;
}
/*输入模块*/
input_message()
{clrscr();
printf("\n\n**********输入学生信息**********\n");
printf("-----------------------------------\n");
h=creat();
bioskey(0);
printf("输入完毕,按任意键返回主菜单!");
bioskey(0);
}
/*输出模块*/
output_message(struct stud *p)
{clrscr();
if(p==NULL)
printf("暂无信息!请回主菜单录入信息!\n");
else
{printf("\n\n=======================通讯录信息表======================\n\n");
printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学\n");
while(p!=NULL)
{printf("-----------------------------------------------------------------------\n");
printf("%s %s %s %d-%d-%d %s %s\n",p->name,p->addr,p->tel,p->bir.y,p->bir.m,p->bir.d,p->yb,p->daxue);
printf("-----------------------------------------------------------------------\n");
printf("\n");
p=p->next;
}
}
printf("\n");
printf("按任意键返回主菜单!\n\n");
bioskey(0);
}
/*保存学生信息*/
save_message(struct stud *h)
{FILE *fp;
struct stud *f;
f=h; /*保证指针位置*/
if((fp=fopen("zhuyan.txt","wb"))==NULL)
{printf("不能打开文件!\n");
return;
}
while(h!=NULL)
{if(fwrite(h,sizeof(struct stud),1,fp)!=1) /*向文件写入数据*/
{printf("文件写入错误!");
return;
}
h=h->next;
}
h=f; /*保证指针位置*/
printf("已存盘,按任意键回上层菜单:\n");
getch();
fclose(fp);
return;
}
/*读取信息*/
read_message()
{FILE *fp;
if((fp=fopen("zhuyan.txt","rb"))==NULL)
{printf("\n\n****暂时还没有该生信息,请按任意键返回上一级菜单.\n");
return;
}
do
{if(fread(h,sizeof(struct stud),1,fp)!=1)
{if(feof(fp))
printf("已到文件末尾.\n"); /*已到文件末尾.*/
else printf("文件读取错误!\n"); /*文件读取错误.*/
return;
}
h=h->next;
}while(h!=NULL);
fclose(fp);
getch();
bioskey(0);
}
/*添加学生信息*/
add_message(struct stud *w)
{struct stud *p,*q;
p=(struct stud*)malloc(N); /*p指向新申请的结点*/
clrscr();
printf("\n请输入学生序号:");
scanf("%d",&p->num);
printf("\n请输入学生姓名:");
scanf("%s",p->name);
printf("\n请输入学生电话:");
scanf("%s",p->tel);
printf("\n请输入学生籍贯:");
scanf("%s",p->addr);
printf("\n请输入学生邮编:");
scanf("%s",p->yb);
printf("\n请输入学生大学:");
scanf("%s",p->daxue);
printf("\n请输入学生出生日期:");
scanf("%d-%d-%d",&p->bir.y,&p->bir.m,&p->bir.d);
p->next=NULL;
if(w==NULL)
{w=p; /*头指针为空,p作为新头指针*/
return 1; /*正确插入返回1*/
}
q=w; /*从头指针开始*/
if((q->num)>(p->num)) /*找到插入位置在首结点之前*/
{p->next=w; /*将首结点链接在新结点之后*/
w=p; /*p作为新的头指针*/
return 1;
}
while((q->next)!=NULL && (q->next->num)<(p->num))
q=q->next; /*继续查找插入位置*/
if(q->next==NULL) /*插入位置在尾结点之后*/
{q->next=p; /*新结点链接到尾结点之后*/
return 1;
}
else if((q->next->num)==(p->num)) /*找到重号*/
{free(p); /*释放新结点的存储空间*/
return 0; /*不插入返回0*/
}
p->next=q->next; /*后续结点链接到新结点之后*/
q->next=p; /*新结点链接到前驱结点之后*/
return 1;
}
/*删除模块*/
del_message(struct stud *w)
{char name[20];
struct stud *p,*q;
if(w==NULL)
return 0; /**w就是头指针,空表不能删除返回0*/
clrscr();
printf("请输入要删除的学生姓名:\n");
scanf("%s",name);
q=w;
if(strcmp(q->name,name)==0) /*找到要删除的是第一个结点*/
{w=q->next; /*修改头指针*/
free(q); /*释放存储空间*/
return 1; /*正确删除返回1*/
}
p=q->next;
while(p!=NULL)
{if(strcmp(p->name,name)==0) /*找到要删除的结点*/
{q->next=p->next; /*后续结点连接到前驱结点之后*/
free(p); /*释放存储空间*/
return 1;
}
q=p; /*推移指针继续查找*/
p=p->next;
}
return 0; /*未找到要删除的结点返回0*/
}
/*修改模块*/
revise_message(struct stud *g)
{int choice;
char name[20],n,m;
do
{clrscr();
printf("\n **********学生学籍信息*********** \n");
printf(" 输入要修改的学生姓名:\n");
scanf("%s",name);
while(g!=NULL)
{ while(strcmp(g->name,name)!=0)
g=g->next;
if(g==NULL)
{printf("\n 该学生不存在!");
bioskey(0);
}
else
{do
{printf("\n 您要修改哪一项?\n");
printf("\n 1序号\n");
printf("\n 2姓名\n");
printf("\n 3籍贯\n");
printf("\n 4电话\n");
printf("\n 5大学\n");
printf("\n 6出生日期\n");
scanf("%d",&choice);
switch(choice)
{case 1:printf("\n 请输入修改后的序号:");
scanf("%d",&g->num);break;
case 2:printf("\n 请输入修改后的姓名:");
scanf("%s",g->name);break;
case 3:printf("\n 请输入修改后的籍贯:");
scanf("%s",g->addr); break;
case 4:printf("\n 请输入修改后的电话:");
scanf("%s",g->tel); break;
case 5:printf("\n 请输入修改后的大学:");
scanf("%s",g->daxue); break;
case 6:printf("\n 请输入修改后的出生日期:");
scanf("%d-%d-%d",&g->bir.y,&g->bir.m,&g->bir.d);break;
}
printf("\n是否继续修改此人信息?y/n\n") ;
getchar();
m=getchar();
}while(m=='y');
printf("\n\n=======================通讯录信息表======================\n\n");
printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学\n");
printf("-----------------------------------------------------------------------\n");
printf("%s %s %s %d-%d-%d %s %s\n",g->name,g->addr,g->tel,g->bir.y,g->bir.m,g->bir.d,g->yb,g->daxue);
printf("-----------------------------------------------------------------------\n");
printf("\n");
getch();
}
break;
}
printf("\n要继续吗?(y/n)\n");
getchar();
n=getchar();
}while(n=='y');
printf("\n 按任意键返回主菜单!");
bioskey(0);
}
/*更新模块*/
renew_message()
{int choice=100;
while(choice!=0)
{printf("\n************更新同学信息*************\n\n");
printf(" 1.添加同学信息\n\n");
printf(" 2.删除同学信息\n\n");
printf(" 3.修改同学信息\n\n");
printf(" 0.返回修改菜单\n\n");
printf(" 请选择(0—3):\n");
printf("******************************************\n\n");
scanf("%d",&choice);
switch(choice)
{case 1:add_message(h);break;
case 2:del_message(h);break;
case 3:revise_message(h);break;
case 0:break;
default:printf("输入有误!\n");
}
}
}
/*按姓名查询*/
inquire_name( struct stud *p)
{ char name[20];
struct stud *f;
f=p;
clrscr();
printf("\n\n 请输入要查找的姓名:");
scanf("%s",&name);
if(p==NULL)
{printf("\n您要查找的学生暂时不存在,请按任意键返回\n");
bioskey(0);
}
else if (strcmp(p->name,name)!=0||p->name==NULL)
p=p->next;
clrscr();
printf("\n\n该生有关信息为:\n\n\n\n");
printf("\n\n=======================通讯录信息表======================\n\n");
printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学\n");
printf("-----------------------------------------------------------------------\n");
printf("%s %s %s %d-%d-%d %s %s\n",p->name,p->addr,p->tel,p->bir.y,p->bir.m,p->bir.d,p->yb,p->daxue);
printf("-----------------------------------------------------------------------\n");
printf("\n");
p=f;
getch();
}
/*按学号查询*/
inquire_tel(struct stud *p)
{char tel[20];
struct stud *f;
f=p;
clrscr();
printf("\n 请输入要查找的电话:");
scanf("%s",&tel);
if(p==NULL)
{printf("\n您要查找的学生暂时不存在,请按任意键返回\n");
bioskey(0);
}
else if(strcmp(p->tel,tel)!=0||p->tel==NULL)
p=p->next;
clrscr();
printf("\n\n该生有关信息为:\n\n\n\n");
printf("\n\n=======================通讯录信息表======================\n\n");
printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学\n");
printf("-----------------------------------------------------------------------\n");
printf("%s %s %s %d-%d-%d %s %s\n",p->name,p->addr,p->tel,p->bir.y,p->bir.m,p->bir.d,p->yb,p->daxue);
printf("-----------------------------------------------------------------------\n");
printf("\n");
p=f;
getch();
}
/*查询模块*/
inquire_message()
{int choice=100;
while(choice!=0)
{printf("\n***********************查询同学通讯信息**********************\n");
printf(" 1.按同学姓名查询:\n");
printf(" 2.按同学电话查询:\n");
printf(" 0.返回主菜单:\n");
printf(" 请选择(0—2):\n");
scanf("%d",&choice);
switch(choice)
{case 1:inquire_name(h);break;
case 2:inquire_tel(h);break;
case 0:break;
default:printf("无此类查询方式!\n");
}
}
}
/*省份统计*/
count_ad(struct stud *p)
{int count=0;
char count_ad[20];
printf("\n 输入要统计的省份名称:\n");
scanf("%s",count_ad);
if(p=NULL)
{printf("\n 该学生不存在!");
bioskey(0);
}
else
{printf(" 在该省份的同学:\n");
printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学\n");
printf("-----------------------------------------------------------------------\n");
p=h; /*p指向头指针!*/
while(p!=NULL)
{ if(strcmp(p->addr,count_ad)==0)
{printf("%s %s %s %d-%d-%d %s %s\n",p->name,p->addr,p->tel,p->bir.y,p->bir.m,p->bir.d,p->yb,p->daxue);
p=p->next;
count++;
}
}
}
printf("在这个省份的同学共有%d个",count);
}
/*生日统计*/
count_birthday(struct stud *p)
{int count=0;
int count_birthday_month;
printf(" 请输入要统计的月份:\n");
scanf("%d",&count_birthday_month);
if(p=NULL)
{printf("\n 该学生不存在!");
bioskey(0);
}
else
{printf(" 在这个月过生日的同学:记得祝贺他们生日快乐!\n");
printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学\n");
printf("-----------------------------------------------------------------------\n");
p=h;
while(p!=NULL)
{ if(p->bir.m==count_birthday_month)
{printf("%s %s %s %d-%d-%d %s %s\n",p->name,p->addr,p->tel,p->bir.y,p->bir.m,p->bir.d,p->yb,p->daxue);
p=p->next;
count++;
}
}
}
printf("在这个月过生日的同学有%d个",count);
}
/*统计模块*/
count_message()
{int choice=100;
while(choice!=0)
{printf("\n\n*************************统计同学通讯信息*******************\n");
printf(" 1.按省份统计信息;\n");
printf(" 2.按生日统计信息;\n");
printf(" 0.返回主菜单;\n");
printf(" 请选择(0--2):\n");
scanf("%d",&choice);
switch(choice)
{case 1:count_ad(h);break;
case 2:count_birthday(h);break;
case 0:break;
default:printf("输入有误!\n");
}
}
}
/*主程序*/
main()
{ int b;
printf("输入任意键进入。\n\n");
bioskey(0);
do
{clrscr();
printf("\n\n\n ***************欢迎进入************* \n\n");
printf(" ********** 学生通讯录管理系统 **********\n\n");
printf(" ** 1输入学生信息 **\n\n");
printf(" ** 2输出学生信息 **\n\n");
printf(" ** 3更新学生信息 **\n\n");
printf(" ** 4查询学生信息 **\n\n");
printf(" ** 5统计学生信息 **\n\n");
printf(" ** 6保存信息 **\n\n");
printf(" ** 7读取信息 **\n\n");
printf(" ** 0退出系统 **\n\n");
printf(" ** 请选择(0~7) : **\n\n");
scanf("%d",&b);
switch(b)
{case 1: input_message(); break;
case 2: output_message(h); break;
case 3: renew_message(); break;
case 4: inquire_message(); break;
case 5: count_message(); break;
case 6: save_message(h); break;
case 7: read_message(); break;
case 0: break;
}
}while(b!=0);
}
2.数组方式:
#include
#include
#define MAX 200
#define N 9
int sum;
/*日期结构体类型*/
struct b_type
{int year; /*年*/
int month; /*月*/
int day; /*日*/
};
/*通讯录结构体类型*/
struct s_type
{ int num; /*序号*/
char name[20]; /*姓名*/
char address[20]; /*省份*/
char tel[40]; /*电话*/
struct b_type birthday; /*生日*/
char yb[20]; /*邮编*/
char daxue[50]; /*大学*/
char banji[40]; /*班级*/
char qq[40]; /*QQ号*/
}s[MAX];
/*保存模块*/
save_message(int sum)
{FILE *fp;
int i;
fp=fopen("e:\\zhuyanmessage.txt","at+");
if(fp==NULL)
{printf("\n打开文件e:\\zhuyanmessage.txt错误!\n");
getch();
exit(1);
}
for(i=0;i
if(fwrite(&s[i],sizeof(struct s_type),1,fp)!=1)
printf("写文件错误!");
fclose(fp);
}
/*输入模块*/
input_message()
{int i=0,n=MAX;
char m;
printf("\n\n 录入学生通讯信息(最多%d个)\n\n",n);
do
{printf("请输入第%d个同学的序号:\n",i+1);
scanf("%d",&s[i].num);
printf("请输入第%d个同学的姓名(不可含空格!):\n",i+1);
scanf("%s",s[i].name);
printf("请输入第%d个同学的省份:\n",i+1);
scanf("%s",s[i].address);
printf("请输入第%d个同学的电话:\n",i+1);
scanf("%s",s[i].tel);
printf("请输入第%d个同学的生日:\n",i+1);
scanf("%d-%d-%d",&s[i].birthday.year,&s[i].birthday.month,&s[i].birthday.day);
printf("请输入第%d个同学的邮编:\n",i+1);
scanf("%s",s[i].yb);
printf("请输入第%d个同学的大学:\n",i+1);
scanf("%s",s[i].daxue);
printf("请输入第%d个同学的班级:\n",i+1);
scanf("%s",s[i].banji);
printf("请输入第%d个同学的QQ号:\n",i+1);
scanf("%s",s[i].qq);
printf("\n----%d个同学的信息输入完毕!----\n",i+1);
printf("是否继续?y/n");
getchar();
scanf("%c",&m);
i++;
}while(m=='y');
printf("\n----%d个同学的信息输入完毕!----\n",i);
sum=i;
printf("\n按回车键返回主菜单!");
getchar();
}
/*读取模块*/
read_message()
{FILE *fp;
int i=0;
if((fp=fopen("e:\\zhuyanmessage.txt","rt"))==NULL)
{printf("\n\n****暂时还没有同学的信息,按任意键选择基本信息的输入!*******\n");
return(i);
}
while(feof(fp)!=1)
{fread(&s[i],sizeof(struct s_type),1,fp);
if(s[i].num==0) break;
else i++;
}
fclose(fp);
return(i);
}
/*输出模块*/
output_message( )
{int i=0;
printf("\n\n=======================通讯录信息表======================\n\n");
printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学======班级=====QQ号码\n");
do
{printf("-----------------------------------------------------------------------\n");
printf("%s %s %s %d-%d-%d %s %s %s %s\n",s[i].name,s[i].address,s[i].tel,s[i].birthday.year,
s[i].birthday.month,s[i].birthday.day,s[i].yb,s[i].daxue,s[i].banji,s[i].qq);
printf("-----------------------------------------------------------------------\n");
i++;
}while(s[i].num!=0);
getch();
printf("按回车键回到主菜单!\n");
getchar();
}
/*添加模块*/
add_message()
{int i=sum;
char m;
do
{printf("请输入一位要添加同学的通讯信息:\n");
printf("请输入新同学的序号:\n");
scanf("%d",&s[i].num);
printf("请输入新同学的姓名(不可含空格!):\n");
scanf("%s",s[i].name);
printf("请输入新同学的省份:\n");
scanf("%s",s[i].address);
printf("请输入新同学的电话号码:\n");
scanf("%s",s[i].tel);
printf("请输入新同学的生日:\n");
scanf("%d-%d-%d",&s[i].birthday.year,&s[i].birthday.month,&s[i].birthday.day);
printf("请输入新同学的邮政编码:\n");
scanf("%s",s[i].yb);
printf("请输入新同学的大学:\n");
scanf("%s",s[i].daxue);
printf("请输入新同学的班级名称:\n");
scanf("%s",s[i].banji);
printf("请输入新同学的QQ号码:\n");
scanf("%s",s[i].qq);
printf("要继续吗?(y/n)");
getchar();
m=getchar();
i++;
}while(m=='y');
sum=i;
printf("\n按回车键继续\n");
getchar();
}
/*删除模块*/
del_message()
{int i,j=0,k;
char del_name[20],m;
do
{printf("请输入要删除信息的同学的姓名(不可含空格!):\n");
scanf("%s",del_name);
for(i=0;i
{if(strcmp(s[i].name,del_name)==0)
{for(k=i;k
s[k]=s[k+1];
sum--;
printf("您已经删除成功!\n");
}
else j++;
if(j==sum) printf("\n该学生不存在!\n");
}
printf("\n要继续吗?(y/n)\n");
getchar();
m=getchar();
}while(m=='y');
printf("\n按回车键返回!\n");
getchar();
}
/*修改模块*/
revise_message()
{ int i,choice,j=0;
char revise_name[20],m,n;
do
{printf("请输入您要修改信息的同学的姓名(不可含空格!):\n");
scanf("%s",revise_name);
for(i=0;i
if(strcmp(s[i].name,revise_name)==0)
{printf("您要修改的同学的信息如下:\n");
printf("姓名=省份==电话==生日(年-月-日)==邮编======大学======班级=====QQ号码\n");
printf("---------------------------------------------------------------------\n");
printf("%s %s %s %d-%d-%d %s %s %s %s\n",s[i].name,s[i].address,s[i].tel,s[i].birthday.year,
s[i].birthday.month,s[i].birthday.day,s[i].yb,s[i].daxue,s[i].banji,s[i].qq);
printf("---------------------------------------------------------------------\n");
do
{printf(" 请选择您要修改哪一项?\n");
printf(" 1.姓名:\n");
printf(" 2.省份:\n");
printf(" 3.电话:\n");
printf(" 4.生日(年-月-日):\n");
printf(" 5.邮政编码:\n");
printf(" 6.大学:\n");
printf(" 7.班级:\n");
printf(" 8.QQ号码:\n");
printf(" 0.返回主菜单");
printf(" 请选择(0--8):\n");
scanf("%d",&choice);
switch(choice)
{case 1:printf("请输入修改后的姓名(不可含空格!):\n");
scanf("%s",s[i].name);break;
case 2:printf("请输入修改后的省份:\n");
scanf("%s",s[i].address);break;
case 3:printf("请输入修改后的电话号码:\n");
scanf("%s",s[i].tel);break;
case 4:printf("请输入修改后的生日(年-月-日):\n");
scanf("%d-%d-%d",&s[i].birthday.year,&s[i].birthday.month,&s[i].birthday.day);break;
case 5:printf("请输入修改后的邮政编码:\n");
scanf("%s",s[i].yb);break;
case 6:printf("请输入修改后的大学:\n");
scanf("%s",s[i].daxue);break;
case 7:printf("请输入修改后的班级名称:\n");
scanf("%s",s[i].banji);break;
case 8:printf("请输入修改后的QQ号码:\n");
scanf("%s",s[i].qq);break;
case 0:break;
default:printf("输入有误!\n");
}
printf("是否继续修改此人信息?y/n\n");
getchar();
n=getchar();
}while(n=='y');
printf("此人信息修改后如下:");
printf("\n\n=======================通讯录信息表======================\n\n");
printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学======班级=====QQ号码\n");
printf("-----------------------------------------------------------------------\n");
printf("%s %s %s %d-%d-%d %s %s %s %s\n",s[i].name,s[i].address,s[i].tel,s[i].birthday.year,
s[i].birthday.month,s[i].birthday.day,s[i].yb,s[i].daxue,s[i].banji,s[i].qq);
printf("-----------------------------------------------------------------------\n");
break;
}
else j++;
if(j==sum) printf("\n该学生的信息不存在!\n");
printf("\n要继续吗?(y/n)\n");
getchar();
m=getchar();
}while(m=='y');
printf("\n按回车键返回!\n");
getchar();
}
/*更新模块*/
renew_message()
{int choice=100;
while(choice!=0)
{printf("\n************更新同学信息*************\n\n");
printf(" 1.添加同学信息\n\n");
printf(" 2.删除同学信息\n\n");
printf(" 3.修改同学信息\n\n");
printf(" 0.返回修改菜单\n\n");
printf(" 请选择(0—3):\n");
printf("******************************************\n\n");
scanf("%d",&choice);
switch(choice)
{case 1:add_message();break;
case 2:del_message();break;
case 3:revise_message();break;
case 0:break;
default:printf("输入有误!\n");
}
}
}
/*姓名查询*/
inquire_name()
{int i,j=0;
char inquire_name[20];
printf("\n 请输入要查询信息的同学的姓名:\n");
scanf("%s",inquire_name);
for(i=0;i
if(strcmp(s[i].name,inquire_name)==0)
{printf("\n************************该同学的信息为:*********************\n");
printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学======班级=====QQ号码\n");
printf("-----------------------------------------------------------------------\n");
printf("%s %s %s %d-%d-%d %s %s %s %s\n",s[i].name,s[i].address,s[i].tel,s[i].birthday.year,
s[i].birthday.month,s[i].birthday.day,s[i].yb,s[i].daxue,s[i].banji,s[i].qq);
printf("-----------------------------------------------------------------------\n");
}
else j++;
if(j==sum) printf("\n 该同学的信息不存在!\n");
}
/*电话号码查询*/
inquire_tel()
{int i,j=0;
char inquire_tel[40];
printf(" 请输入要查询的电话号码:\n");
scanf("%s",inquire_tel);
for(i=0;i
if(strcmp(s[i].tel,inquire_tel)==0)
{printf("\n************************该同学的信息为:*********************\n");
printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学======班级=====QQ号码\n");
printf("-----------------------------------------------------------------------\n");
printf("%s %s %s %d-%d-%d %s %s %s %s\n",s[i].name,s[i].address,s[i].tel,s[i].birthday.year,
s[i].birthday.month,s[i].birthday.day,s[i].yb,s[i].daxue,s[i].banji,s[i].qq);
printf("-----------------------------------------------------------------------\n");
break;
}
else j++;
if(j==sum) printf("\n 该同学的信息不存在!\n");
}
/*查询模块*/
inquire_message()
{int choice=100;
while(choice!=0)
{printf("\n***********************查询同学通讯信息**********************\n");
printf(" 1.按同学姓名查询:\n");
printf(" 2.按同学电话查询:\n");
printf(" 0.返回主菜单:\n");
printf(" 请选择(0—2):\n");
scanf("%d",&choice);
switch(choice)
{case 1:inquire_name();break;
case 2:inquire_tel();break;
case 0:break;
default:printf("无此类查询方式!\n");
}
}
}
/*省份统计*/
count_ad()
{int i,j=0,count=0;
char count_ad[20];
printf("\n 输入要统计的省份名称:\n");
scanf("%s",count_ad);
printf(" 在该省份的同学:\n");
printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学======班级=====QQ号码\n");
for(i=0;i
if(strcmp(s[i].address,count_ad)==0)
{printf("-----------------------------------------------------------------------\n");
printf("%s %s %s %d-%d-%d %s %s %s %s\n",s[i].name,s[i].address,s[i].tel,s[i].birthday.year,
s[i].birthday.month,s[i].birthday.day,s[i].yb,s[i].daxue,s[i].banji,s[i].qq);
printf("-----------------------------------------------------------------------\n");count++;
}
else j++;
if(j==sum) printf("\n 该省份的信息不存在!\n");
printf("在这个省份的同学共有%d个",count);
}
/*班级统计*/
count_bj()
{int i,j=0,count=0;
char count_bj[40];
printf(" 请输入要统计的班级的名称:\n");
scanf("%s",count_bj);
printf(" 在这个专业的同学:\n");
printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学======班级=====QQ号码\n");
for(i=0;i
if(strcmp(s[i].banji,count_bj)==0)
{printf("-----------------------------------------------------------------------\n");
printf("%s %s %s %d-%d-%d %s %s %s %s\n",s[i].name,s[i].address,s[i].tel,s[i].birthday.year,
s[i].birthday.month,s[i].birthday.day,s[i].yb,s[i].daxue,s[i].banji,s[i].qq);
printf("-----------------------------------------------------------------------\n");count++;
}
else j++;
if(j==sum) printf("\n 该班级的信息不存在!\n");
printf("在这个班级的同学有%d个!",count);
}
/*生日统计*/
count_birthday()
{int i,j=0,count=0;
int count_birthday_month;
printf(" 请输入要统计的月份:\n");
scanf("%d",&count_birthday_month);
printf(" 在这个月过生日的同学:记得祝贺他们生日快乐!\n");
printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学====专业=====QQ号码\n");
for(i=0;i
if(s[i].birthday.month==count_birthday_month)
{printf("-----------------------------------------------------------------------\n");
printf("%s %s %s %d-%d-%d %s %s %s %s\n",s[i].name,s[i].address,s[i].tel,s[i].birthday.year,
s[i].birthday.month,s[i].birthday.day,s[i].yb,s[i].daxue,s[i].banji,s[i].qq);
printf("-----------------------------------------------------------------------\n");count++;
}
else j++;
if(j==sum) printf("\n 该月份的信息不存在!\n");
printf("在这个月过生日的同学有%d个",count);
}
/*统计模块*/
count_message()
{int choice=100;
while(choice!=0)
{printf("\n\n*************************统计同学通讯信息*******************\n");
printf(" 1.按省份统计信息;\n");
printf(" 2.按班级统计信息;\n");
printf(" 3.按生日统计信息;\n");
printf(" 0.返回主菜单;\n");
printf(" 请选择(0--3):\n");
scanf("%d",&choice);
switch(choice)
{case 1:count_ad();break;
case 2:count_bj();break;
case 3:count_birthday();break;
case 0:break;
default:printf("输入有误!\n");
}
}
}
/*排序模块*/
sort_message()
{int i,j;
struct s_type year1,month1,day1;
for(i=0;i
for(j=i+1;j
{if(s[i].birthday.year>s[j].birthday.year)
{ year1=s[i];
s[i]=s[j];
s[j]=year1;
}
if(s[i].birthday.year==s[j].birthday.year)
if(s[i].birthday.month>s[j].birthday.month)
{month1=s[i];
s[i]=s[j];
s[j]=month1;
}
if(s[i].birthday.year==s[j].birthday.year)
if(s[i].birthday.month==s[j].birthday.month)
if(s[i].birthday.day>s[j].birthday.day)
{day1=s[i];
s[i]=s[j];
s[j]=day1;
}
}
getchar();
printf("年龄从大到小的顺序为:\n");
printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学=====班级=====QQ号码\n");
for(i=0;i
{printf("-----------------------------------------------------------------------\n");
printf("%s %s %s %d-%d-%d %s %s %s %s\n",s[i].name,s[i].address,s[i].tel,s[i].birthday.year,
s[i].birthday.month,s[i].birthday.day,s[i].yb,s[i].daxue,s[i].banji,s[i].qq);
printf("-----------------------------------------------------------------------\n");
}
getchar();
}
/*主程序*/
main()
{int choice;
sum=read_message();
bioskey(0);
do
{printf("\n\n\n ***************欢迎进入************* \n\n");
printf(" ********** 学生通讯录管理系统 **********\n\n");
printf(" ** 1输入学生信息 **\n\n");
printf(" ** 2输出学生信息 **\n\n");
printf(" ** 3更新学生信息 **\n\n");
printf(" ** 4查询学生信息 **\n\n");
printf(" ** 5统计学生信息 **\n\n");
printf(" ** 6学生排行信息 **\n\n");
printf(" ** 0退出系统 **\n\n");
printf(" ** 请选择(0~6) : **\n\n");
scanf("%d",&choice);
switch(choice)
{case 1: input_message(); break;
case 2: output_message(); break;
case 3: renew_message(); break;
case 4: inquire_message(); break;
case 5: count_message(); break;
case 6: sort_message(); break;
case 0: break;
}
}while(choice!=0);
save_message(sum);
printf("以上同学的信息已经保存!\n");
}