当前位置:文档之家› 学生通讯录管理系统

学生通讯录管理系统

学生通讯录管理系统————————————————————————————————作者:————————————————————————————————日期:“学生通讯信息记录系统”的设计与实现一、设计要求1.问题的描述“学生通讯信息记录系统”是为了实现快速的对学生信息进行录入、删除、查找、显示。

各个功能靠函数实现。

2.需求分析(1)应该包括以下功能:输入信息、显示信息、查找以姓名作为关键字、删除信息(2)作为一个完整的系统,应具有友好的界面和较强的容错能力二、概要设计1.主界面设计2.储存结构设计本系统主要采用链表类型来表示储存“学生信息记录系统”中的信息。

程序中定义了address结构。

其中,包括学生的姓名、宿舍信息和学号。

3.系统功能的设计1) 输入信息——enter();2) 显示信息———display( );3) 查找以姓名作为关键字———search( );4) 删除信息———delete( );三、模块设计1.模块设计本成绩包含两个模块:主程序模块和链表操作模块。

2.系统的程序及功能设计系统的功能主要靠函数的功能的实现的,以下是实现各功能的函数:void enter(); /*函数声明*/void search();void save();void load();void list();void ddelete(struct address **start,struct address **last);void insert(struct address *i,struct address **start, struct address **last);void inputs(char *,char *,int);void display(struct address *);int menu_select(void);四、详细设计1.数据类型定义2.struct address{ /*定义结构*/3. char name[10];4. char street[50];5. char city[10];6. char state[15];7. char eip[7];8. struct address *next; /*后继指针*/9. struct address *prior; /*前驱指针*/10.};系统主要子程序详细设计(1)插入学生信息void enter() /*输入函数,本函数循环输入资料,当输入姓名为空时退出*/{struct address *info; /*定义当前结点*/for(;;){info=(struct address *)malloc(sizeof(struct address)); /*为当前结点分配空间*/if(!info){printf("\n Out of memory");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<stdio.h>#include<stdlib.h>#include<string.h>struct address{ /*定义结构*/ char name[10];char street[50];char city[10];char state[15];char eip[7];struct address *next; /*后继指针*/struct address *prior; /*前驱指针*/ };struct address *start; /*首结点*/struct address *last; /*尾结点*/struct address *find(char *); /*声明查找函数*/void enter(); /*函数声明*/void search();void save();void load();void list();void ddelete(struct address **start,struct address **last); void insert(struct address *i,struct address **start,struct address **last);void inputs(char *,char *,int);void display(struct address *);int menu_select(void);void main(){start = last = NULL;for(;;){switch(menu_select()){case 1:enter();continue;case 2:ddelete(&start,&last);continue;case 3:list();continue;case 4:search();continue;case 5:exit(0);}}}int menu_select(void) /*主目录*/{char s[80];int c;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);return c; /*返回输入值*/}void enter() /*输入函数,本函数循环输入资料,当输入姓名为空时退出*/{struct address *info; /*定义当前结点*/for(;;){info=(struct address *)malloc(sizeof(struct address)); /*为当前结点分配空间*/if(!info){printf("\n Out of memory");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); /*调用结点插入函数*/ }}void inputs(char *prompt,char *s,int count) /*输入函数,有越界检测功能*/{char p[255];do{printf(prompt);fgets(p,254,stdin);if(strlen(p)>count)printf("\nToo Long\n");}while(strlen(p)>count);p[strlen(p)-1]=0;strcpy(s,p);}void insert( /*数据插入函数*/struct address *i,struct address **start,struct address **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;}}void ddelete(struct address **start,struct address **last) /*删除函数*/{struct address *info;char s[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");}}struct address *find(char *name) /*查找函数,形参为欲查找结点的name域*/{struct address *info;info=start;while(info){if(!strcmp(name,info->name))return info;info=info->next;}printf("未找到相关信息.\n");return NULL;}/*输出整个链表*/void list(void){struct address *info;info=start;if(info==NULL)printf("当前记录为空!");else printf("姓名\t院系\t宿舍楼\t宿舍号\t学号\t\n");while(info){display(info);if(info->next==NULL){break; } info=info->next;};printf("\n\n");}void display(struct address *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");}void search(void) /*查找函数*/{char name[40];struct address *info;printf("请输入要查找的姓名:"); /*输入欲查找的姓名*/ gets(name);info=find(name);if(!info)printf("姓名不存在\n"); /*如果没找到,显示Not found*/elsedisplay(info); /*如果找到,显示该结点资料*/}七、用户使用手册(1)本程序的执行文件为“学生通讯录管理系统.exe”。

相关主题