学生通讯录管理系统(C语言课程设计实验报告).doc
C语言课程设计姓名:刘显学号:09041131班级: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 studentlong num;char name20;int banji;char tel11;char Email20;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(" * 20092010 *");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 name20;printf("n请输入你要查询的学生姓名:n");scanf("%s",name);s=stu;while(strcmp(s->name,name)!=0)s=s->next;if(s=NULL)puts("查无此学生姓名!");goto end;elseputs("该学生的信息为:"); 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;elseputs("该学生的信息为:");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; else s2->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 b20; 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->name,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”键查看关于。");puts("n返回主菜单请按【9】");if(getche()='9') menu();void main() /*主函数*/char a;menu();puts("n您为首次使用本系统,强烈建议您按1开始录入学生信息,");puts("否则有可能导致程序运行错误!您可以按8查看帮助.");a=getche();while(a) puts(""); switch(a) case'0':goto end;break; case '1': puts("n好了,您可以开始向本系统录入学生通讯录信息了:"); stu=shuru(); system("cls"); menu(); puts("n学生信息录入完毕,请输入你的选择(06):n"); break; case '2':findall();puts("n请输入你的选择(06):"); break; case '3':findname();puts("n请输入你的选择(06):"); break; case '4':findnum();puts("n请输入你的选择(06):"); break; case '5':stu=shanchu(stu);puts("n请输入你的选择(06):"); break; case '6':paixu();puts("n请输入你的选择(06):"); break; case '7':guanyu();puts("n请输入你的选择(06):"); break; case '8':help();puts("n请输入你的选择(06):"); break; default:puts("输错了!笨蛋!快点按数字1键录入学生信息吧!"); break; a=getche(); end:;puts("谢谢您使用本系统,欢迎再次使用!");四、调试主要是通过截图来显示运行过程以下是程序运行的主界面:按1后,开始录入信息,程序会提示你输入学生个数(例如本例中输入4个),当输完4个学生的信息时,程序会提示你已输入完毕:学生信息录入完毕,提示输入(0到6)进行选择:这时我选择按2输出所有学生信息,按9返回:按3按姓名查询信息:按4按学号查询信息:按5删除学生信息,这是按学号删除学生信息,本例中,删除学号为41212的学生信息:删除成功后,系统自动将剩下的学生信息列出:按6按学号从小到大进行排序,可以发现,排序成功:按8查看帮助函数:呵呵,这是我设置的关于函数,满足一下敝人的虚荣心嘛_,版权所有,翻版必究哦!最后按0退出系统:呵呵,怎么样?我写的程序还行吧。嘿嘿三、总结这个程序我只是总体上参考了一下网上程序的架构,具体的各个函数是参照课本上链表那一章的内容的,比如结构体的建立、查找和排序等功能,这些书上都有类似的,其中排序功能虽没有原版的,但是在第六章中有一个用冒泡法排序的例题,我就是仿照这个模式来对结构体进行排序的,总之整个程序中蕴含了我很多的汗水。