学生通讯录管理系统.docx
《学生通讯录管理系统.docx》由会员分享,可在线阅读,更多相关《学生通讯录管理系统.docx(16页珍藏版)》请在冰点文库上搜索。
学生通讯录管理系统
学生通讯录管理系统
————————————————————————————————作者:
————————————————————————————————日期:
“学生通讯信息记录系统”的设计与实现
一、设计要求
1.问题的描述
“学生通讯信息记录系统”是为了实现快速的对学生信息进行录入、删除、查找、显示。
各个功能靠函数实现。
2.需求分析
(1)应该包括以下功能:
输入信息、显示信息、查找以姓名作为关键字、删除信息
(2)作为一个完整的系统,应具有友好的界面和较强的容错能力
二、概要设计
1.主界面设计
2.储存结构设计
本系统主要采用链表类型来表示储存“学生信息记录系统”中的信息。
程序中定义了address结构。
其中,包括学生的姓名、宿舍信息和学号。
3.系统功能的设计
1)输入信息——enter();
2)显示信息———display();
3)查找以姓名作为关键字———search();
4)删除信息———delete();
三、模块设计
1.模块设计
本成绩包含两个模块:
主程序模块和链表操作模块。
2.系统的程序及功能设计
系统的功能主要靠函数的功能的实现的,以下是实现各功能的函数:
voidenter();/*函数声明*/
voidsearch();
voidsave();
voidload();
voidlist();
voidddelete(structaddress**start,structaddress**last);
voidinsert(structaddress*i,structaddress**start,structaddress**last);
voidinputs(char*,char*,int);
voiddisplay(structaddress*);
intmenu_select(void);
四、详细设计
1.数据类型定义
2.structaddress{/*定义结构*/
3.charname[10];
4.charstreet[50];
5.charcity[10];
6.charstate[15];
7.chareip[7];
8.structaddress*next;/*后继指针*/
9.structaddress*prior;/*前驱指针*/
10.};系统主要子程序详细设计
(1)插入学生信息
voidenter()/*输入函数,本函数循环输入资料,当输入姓名为空时退出*/
{
structaddress*info;/*定义当前结点*/
for(;;)
{
info=(structaddress*)malloc(sizeof(structaddress));/*为当前结点分配空间*/
if(!
info)
{
printf("\nOutofmemory");
exit(0);/*如果分配空间失败,退出程序*/
}
printf("输入空姓名结束:
\n");
inputs("请输入姓名:
",info->name,10);
if(!
info->name[0])
break;/*如果输入姓名为空,结束循环*/
inputs("请输入院系:
",info->street,50);
inputs("请输入宿舍楼:
",info->city,15);
inputs("请输入宿舍号:
",info->state,15);
inputs("请输入学号:
",info->eip,7);
insert(info,&start,&last);/*调用结点插入函数*/
}
}
五、测试分析
1.输入学生信息
2.显示信息
3.查找信息
4.删除信息
5.退出
六、程序清单
#include
#include
#include
structaddress{/*定义结构*/
charname[10];
charstreet[50];
charcity[10];
charstate[15];
chareip[7];
structaddress*next;/*后继指针*/
structaddress*prior;/*前驱指针*/
};
structaddress*start;/*首结点*/
structaddress*last;/*尾结点*/
structaddress*find(char*);/*声明查找函数*/
voidenter();/*函数声明*/
voidsearch();
voidsave();
voidload();
voidlist();
voidddelete(structaddress**start,structaddress**last);
voidinsert(structaddress*i,structaddress**start,
structaddress**last);
voidinputs(char*,char*,int);
voiddisplay(structaddress*);
intmenu_select(void);
voidmain()
{
start=last=NULL;
for(;;)
{
switch(menu_select())
{
case1:
enter();
continue;
case2:
ddelete(&start,&last);
continue;
case3:
list();
continue;
case4:
search();
continue;
case5:
exit(0);
}
}
}
intmenu_select(void)/*主目录*/
{
chars[80];
intc;
printf("\n欢迎使用学生通讯录系统");
printf("\n\n");
printf("\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t┃************************************************************┃\n");
printf("\t┃***┃\n");
printf("\t┃*1.输入信息*2.删除信息*┃\n");
printf("\t┃***┃\n");
printf("\t┃************************************************************┃\n");
printf("\t┃***┃\n");
printf("\t┃*3.显示信息*4.查找*┃\n");
printf("\t┃***┃\n");
printf("\t┃************************************************************┃\n");
printf("\t┃5.退出┃\n");
printf("\t┃************************************************************┃\n");
printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
do{
printf("\n请输入你的选择:
\n");
gets(s);
c=atoi(s);
}while(c<0||c>7);
returnc;/*返回输入值*/
}
voidenter()/*输入函数,本函数循环输入资料,当输入姓名为空时退出*/
{
structaddress*info;/*定义当前结点*/
for(;;)
{
info=(structaddress*)malloc(sizeof(structaddress));/*为当前结点分配空间*/
if(!
info)
{
printf("\nOutofmemory");
exit(0);/*如果分配空间失败,退出程序*/
}
printf("输入空姓名结束:
\n");
inputs("请输入姓名:
",info->name,10);
if(!
info->name[0])
break;/*如果输入姓名为空,结束循环*/
inputs("请输入院系:
",info->street,50);
inputs("请输入宿舍楼:
",info->city,15);
inputs("请输入宿舍号:
",info->state,15);
inputs("请输入学号:
",info->eip,7);
insert(info,&start,&last);/*调用结点插入函数*/
}
}
voidinputs(char*prompt,char*s,intcount)/*输入函数,有越界检测功能*/
{
charp[255];
do
{
printf(prompt);
fgets(p,254,stdin);
if(strlen(p)>count)
printf("\nTooLong\n");
}while(strlen(p)>count);
p[strlen(p)-1]=0;
strcpy(s,p);
}
voidinsert(/*数据插入函数*/
structaddress*i,
structaddress**start,
structaddress**last
)
{
if(*last==NULL)/*如果尾结点为空,意味着当前链表为空*/
{
i->next=NULL;
i->prior=NULL;
*last=i;
*start=i;
return;
}
else
{
(*last)->next=i;
i->prior=*last;
i->next=NULL;
*last=(*last)->next;
}
}
voidddelete(structaddress**start,structaddress**last)/*删除函数*/
{
structaddress*info;
chars[80];
inputs("请输入姓名:
",s,10);/*输入欲删除结点的name域内容*/
info=find(s);/*查找该内容*/
if(info)/*如果找到*/
{
printf("Deleting......\n");
if(*start==info)/*如果该结点为首结点,把该结点的下驱作为新的首结点(入口)*/
{
*start=info->next;
if(*start)
(*start)->prior=NULL;
else*last=NULL;
}
else/*如果欲删除的结点不是首结点*/
{
info->prior->next=info->next;/*令该结点的前驱的next指针指向该结点的后驱,
*又令该结点的后驱的prior指点指向该结点的前驱*/
if(info!
=*last)/*如果该结点是尾结点,则令该结点的前驱为尾结点*/
info->next->prior=info->prior;
else
*last=info->prior;
}
free(info);/*释放该结点所占用的内存*/
printf("-Ok,删除成功!
\n");
}
}
structaddress*find(char*name)/*查找函数,形参为欲查找结点的name域*/
{
structaddress*info;
info=start;
while(info)
{
if(!
strcmp(name,info->name))returninfo;
info=info->next;
}
printf("未找到相关信息.\n");
returnNULL;
}
/*输出整个链表*/
voidlist(void)
{
structaddress*info;
info=start;
if(info==NULL)
printf("当前记录为空!
");
elseprintf("姓名\t院系\t宿舍楼\t宿舍号\t学号\t\n");
while(info)
{
display(info);
if(info->next==NULL){break;}info=info->next;
};
printf("\n\n");
}
voiddisplay(structaddress*info)/*输出传入结点函数*/
{
printf("%s\t",info->name);
printf("%s\t",info->street);
printf("%s\t",info->city);
printf("%s\t",info->state);
printf("%s\t",info->eip);
printf("\n");
}
voidsearch(void)/*查找函数*/
{
charname[40];
structaddress*info;
printf("请输入要查找的姓名:
");/*输入欲查找的姓名*/
gets(name);
info=find(name);
if(!
info)
printf("姓名不存在\n");/*如果没找到,显示Notfound*/
else
display(info);/*如果找到,显示该结点资料*/
}
七、用户使用手册
(1)本程序的执行文件为“学生通讯录管理系统.exe”。
(2)进入本系统之后,随即显示系统住菜单界面。
用户可以在该界面下根据提示输入并按回车键确定,执行相应的菜单命令。
(3)本系统可以对学生信息进行录入和删除。
数据结构课程设计
课题:
学生成绩管理系统
姓名:
孙轩宇
学号:
E01014316
专业:
计算机科技
院系:
计科院
班级:
10科技2班
2010.10.8