C语言课程设计姓名:***学号:********班级:090411专业:计算机科学与技术学院:信息工程学院设计题目:学生通讯录管理系统指导教师:***提交时间:2010年9月4日课程题目:学生通讯录管理系统要求:学生通讯录信息包括:学号、姓名、班机、联系电话、E-mail、宿舍等主要功能:1、通讯录信息录入功能2、通讯录信息删除功能3、通讯录信息浏览功能4、通讯录信息查询功能5、按学号排序功能一、总体设计首先,整个系统必须有一个主函数,为了尽量提高程序的易修改性,且不至于相互干扰,将每一个功能分成不同的模块,用不同的函数来实现,例如在我写的这个程序中,一共用了11个函数,分别是:主菜单函数menu()、关于函数gaunyu()、帮助函数help ()、输出单个学生信息函数shuchu()、输入函数shuru()、输出所有学生信息函数findall()、按姓名查找函数findname()、按学号查找函数findnum()、删除函数shanchu()、排序函数paixu ()、主函数main(),这样在整个程序的设计过程中也就一目了然,写起来也相对轻松了不少。
这个程序我只是总体上参考了一下网上程序的架构,具体的各个函数是参照课本上《链表》那一章的内容的,比如结构体的建立、查找和排序等功能,这些书上都有类似的,其中排序功能虽没有原版的,但是在第六章中有一个用冒泡法排序的例题,我就是仿照这个模式来对结构体进行排序的,总之整个程序中蕴含了我很多的汗水。
二、具体设计关于这个程序的具体设计,也不是一两句话就能说完的,所以我也不想再在这里赘述了,因为程序里都可以看的到,几乎每个函数都倾注了我的大量汗水,我在这上面花了不少的时间,不过从中也收获了很多,因为不停地修改不停的调试,总之还是直接看源程序吧,因为也没必要在这里重复地说废话。
三、源代码以下是整个程序的源代码,其中我的主菜单函数是很美观的,但由于这里字体和板式的限制,不能很好的显现,可以看我下面程序运行的截图就知道了。
——————————————————#include<stdio.h>#include<string.h>#include<malloc.h>#include<stdlib.h>#include<conio.h>#define NULL 0struct student{long num;char name[20];int banji;char tel[11];char Email[20];int sushe;struct student *next;};struct student *stu;int n;void menu(void){ /*主菜单函数*/system("cls");puts("****************************************************************************");puts("** ^_^学生通讯录管理系统^_^ **");puts("****************************************************************************");puts("********计 ********");puts("******* *******");puts("******算 ******");puts("***** 0 1=录入学生通讯录信息*****");puts("**** 9 刘 2=列出所有学生通讯录机 ****");puts("*** 0 3=按姓名查询信息***");puts("** 4 显 4=按学号查询信息科 **");puts("* 1 5=删除学生信息*");puts("** 1 安 6=按学号将通讯录排序学 **");puts("*** 3 7=关于***");puts("**** 1 8=帮助与 ****");puts("***** 0=退出*****");puts("******技 ******");puts("******* *******");puts("********术 ********");puts("****************************************************************************");}void guanyu() /*关于函数*/{system("cls");puts("\n ************************** ");puts(" *** 版权所有,翻版必究! ***");puts("**** copyright◎刘显安! ****");puts(" *** 2009~2010 ***");puts(" **************************");puts("\n返回主菜单请按【9】");if(getche()=='9') menu();}struct student *shuru(void) /*输入函数*/{system("cls");struct student *s1,*s2;n=1;int num;puts("请输入学生个数(提示:个数不能输入0!):");scanf("%d",&num);s1=s2=(struct student *)malloc(sizeof(struct student)); puts("*************************************************"); puts("请输入学号:");scanf("%ld",&s1->num);puts("请输入学生姓名:");scanf("%s",s1->name);puts("请输入班级:");scanf("%d",&s1->banji);puts("请输入电话号码:");scanf("%s",s1->tel);puts("请输入电子邮件:");scanf("%s",s1->Email);puts("请输入学生宿舍号:");scanf("%d",&s1->sushe);stu=s1;while(n<num){s2->next=s1;s2=s1;s1=(struct student *)malloc(sizeof(struct student));puts("*************************************************"); puts("请输入学号:");scanf("%ld",&s1->num);puts("请输入学生姓名:");scanf("%s",s1->name);puts("请输入班级:");scanf("%d",&s1->banji);puts("请输入电话号码:");scanf("%s",s1->tel);puts("请输入电子邮件:");scanf("%s",s1->Email);puts("请输入学生宿舍号:");scanf("%d",&s1->sushe);n=n+1;}puts("*************************************************"); s2->next=s1;s2=s1;s2->next=NULL;return(stu);//system("cls");}void shuchu(struct student *s){ /*输出单个学生信息*/ printf("* %-8ld",s->num);printf("%-15s",s->name);printf("%-8d",s->banji);printf("%-15s",s->tel);printf("%-15s",s->Email);printf("%-5d *\n",s->sushe);}void findall() /*输出所有学生信息*/{system("cls");struct student *s;//if(n=2)//printf("\n现在有%d个学生信息,分别是:\n",n);//elseprintf("\n现在有%d个学生信息,分别是:\n",n);puts("_____________________________________________________ ___________________");puts("* 学号姓名班级电话电子邮件宿舍 *");s=stu;while(s!=NULL){shuchu(s);s=s->next;}puts("_____________________________________________________ ___________________");puts("返回主菜单请按【9】");if(getche()=='9') menu();}void findname(){ /*按姓名查找函数*/system("cls");struct student *s;char name[20];printf("\n请输入你要查询的学生姓名:\n");scanf("%s",name);s=stu;while(strcmp(s->name,name)!=0){s=s->next;}if(s==NULL){puts("查无此学生姓名!");goto end;}else{puts("该学生的信息为:");puts("* 学号姓名班级电话电子邮件宿舍 *");shuchu(s);}end:;puts("返回主菜单请按【9】");if(getche()=='9') menu();}void findnum() /*按学号查找函数*/{system("cls");struct student *s;puts("请输入你要查询的学生学号:");long i;scanf("%ld",&i);s=stu;while(s->num!=i){s=s->next;}if(s==NULL){puts("查无此学生学号!");goto end;}else{puts("该学生的信息为:");puts("* 学号姓名班级电话电子邮件宿舍 *");shuchu(s);}end:;puts("返回主菜单请按【9】");if(getche()=='9') menu();}struct student *shanchu(struct student*stu) /*删除函数*/ {system("cls");long num;char s;struct student *s1,*s2;if(stu==NULL){puts("傻冒!没有任何学生信息,还删个屁啊,删删删!");goto end;}puts("请输入你要删除的学生学号:");scanf("%ld",&num);s1=stu;puts("警告:你确定要删除这个学生的信息吗(Y/N)?");scanf("%s",&s);if((s=='Y')||(s=='y')){while((num!=s1->num)&&(s1->next!=NULL)){s2=s1;s1=s1->next;}if(num==s1->num){ puts("该学生的信息为:");puts("* 学号姓名班级电话电子邮件宿舍 *");shuchu(s1);if(s1==stu)stu=s1->next;elses2->next=s1->next;puts("注意哟,该学生的信息已经删除了!剩下的学生通讯录信息如下:");n=n-1;}}findall();return(stu);end:;puts("返回主菜单请按【9】");if(getche()=='9') menu();}void paixu(){ /*排序函数*/struct student *p, *p1,*p2;int i,j;int temp;char b[20];if(stu==NULL){printf("\n学生信息不存在\n");goto end;}for(i=0;i<n-1;i++){p1=stu;for(j=0;j<n-1;j++){p2=p1->next;if(p1->num>p2->num){temp=p1->num;p1->num=p2->num;p2->num=temp;strcpy(b,p1->name);strcpy(p1->name,p2->name);strcpy(p2->nam e,b);temp=p1->banji;p1->banji=p2->banji;p2->banji=temp;strcpy(b,p1->tel);strcpy(p1->tel,p2->tel);strcpy(p2->tel,b) ;strcpy(b,p1->Email);strcpy(p1->Email,p2->Email);strcpy(p2-> Email,b);temp=p1->sushe;p1->sushe=p2->sushe;p2->sushe=temp;}p1=p1->next;}}p=stu;puts("已按学生学号顺序排序完毕!重新排序如下:");puts("***************************************************** ***********************");puts("* 学号姓名班级电话电子邮件宿舍 *");while(p!=NULL){printf("* %-8ld",p->num);printf("%-15s",p->name);printf("%-8d",p->banji);printf("%-15s",p->tel);printf("%-15s",p->Email);printf("%-5d *\n",p->sushe);p=p->next;}end:;puts("返回主菜单请按【9】");if(getche()=='9')menu();}void help() /*帮助函数*/{system("cls");puts("\n1、请按提示操作,第一次进入本系统时请按“1”录入学生信息,");puts(" 否则有可能造成程序运行错误!");puts("2、添加、修改功能本系统暂不提供,还有待以后完善,谢谢合作!");puts("3、请注意查看“Num Lock”是否打开,如果没有打开,则按数字\n 键可能导致程序错误!");puts("4、版权所有,翻版必究!请按“7”键查看关于。