C语言课程设计报告学生宿舍管理系统.doc
-C语言课程设计报告题目:学生宿舍管理系统系部名称:专业名称:班级:学生姓名:指导教师:时间:一、 课程设计目的1.设计一个ubuntu下的学生宿舍管理系统2.掌握用C语言定义单链表构造,并实现其创立、插入、删除等根本操作。二、课程设计容用C语言编写“学生宿舍管理系统,要求如下:1. 创立链表,录入数据。2. 数据的读写操作。3. 数据的更新操作。4. 数据的删除和插入。5. 请你要求对数据进展查找。6. 按要求排序。7. 设计总体菜单界面。三、实验要求1、录入数据学生的根本信息,包括*、*、性别、年龄、专业、班级等。宿舍楼的根本信息,包括宿舍楼号、学生所住的房间号和宿舍床位号等。2、数据存储信息的录入要求用链表,把输入的信息要求存储到指定文件夹中,以便随时查看,也可供程序调用,便操作人员不用重复输入数据。3、数据的更新更新包括插入、删除、修改。删除分根据*删除和根据学生的楼层信息删除。5、数据的查询查询可以根据*和宿舍信息不同面进展查询,便操作者使用。6、数据的排序操作者可以使所输入的信息按*排序。7、数据的统计按整体统计,统计所有学生人数,男生人数和女生人数。四、概要设计1系统构造图功能模块图主函数录入存储数据操作输出信息输入统计查找修改删除插入显示排序2功能模块说明:(1). 数据录入:创立单链表,调用Initnode()函数申请头结点,在调用append(),在调用Write_to_File()函数将信息写入文件中,(2) 插入模块:先将文件信息读出,再调用insert()函数,可以向文件中插入信息。(3) 插入模块:先将文件信息读出,再调用del()函数,可以将输入错误或者需要的信息删除。(4) 修改模块:先将文件信息读出,再调用modify()函数,将输入错误的信息修改。(5) 查询模块:先将文件信息读出,再调用search(),在search()中有调用两个数,一个按照宿舍信息查询sushe_search(),需要楼号和宿舍号,一个按照生信息查询*uehao_search()需要学生*或者*。(6) 排序模块:先将文件信息读出,再调用sort (),按照学生*排序,拍完续没有直接写入文件,如果要直接写入调用文件读入函数Write_to_File().(7) 统计模块:先将文件信息读出,再调用tongji()函数,统计了女生人数和男生人数,还统计了总人数.五详细过程和运行结果:删除模块开场输入要删除学生的*num组织循环,扫描存储学生信息的链表p->num:num!= =删除该学生信息完毕开场插入模块头插入学生信息输入插入的学生信息将其入栈,即将插入的学生信息插到了最前面完毕查找模块开场选择查找方式按宿舍信息查找按学生*查找组织循环,扫描存储学生信息的链表表输入要查找的学生lounum,sushenum,chuangnum输入要查找的学生*nump->lounum:sushenup->sushenum:sushenup->chuangnum:chuangnump->num:num!= != 输出该学生的信息输出该学生信息 完毕 开场修改模块输入要修改的学生*num组织循环,扫描存储学生信息的链表表p->num:num!= =修改学生信息完毕 开场排序模块组织循环,扫描存储学生信息的链表表选出*最小的学生,与第一学生交换存储位置在余下的学生中选出*最小的学生与第二个学生交换存储位置以此类推,直至排序完成完毕开场统计模块组织循环,扫描存储学生信息的链表表p->se*=mp->se*=wCount2+Count1+完毕六参考文献:"C语言程序设计": 曙燕七源代码*include <stdio.h>*include <stdlib.h>*include <string.h>/*include <conio.h> typedef struct Student intnum; /*/ charname15; /*/ charse*; /*性别*/ charzhuanye20; /*专业*/ intlounum; /*楼号*/ intsushenum; /*宿舍号*/ intchuangnum; /*床号*/ struct Student *ne*t;Stu;void Write_to_File(Stu *L) /*将信息写入文件*/ FILE *fp; Stu *p; fp=fopen("sushe.t*t","w"); if(fp=NULL) printf("翻开失败!"); getchar();getchar(); e*it(0); p=L->ne*t; while(p) fprintf(fp,"%d %s %c %s %d %d %dn",p->num,p->name,p->se*, p->zhuanye,p->lounum,p->sushenum,p->chuangnum); p=p->ne*t; fclose(fp);void InitStu(Stu *h) /*创立头结点*/ (*h)=(Stu *)malloc(sizeof(Stu); if(h=NULL) printf("创立失败!"); getchar();getchar(); e*it(0); (*h)->ne*t=NULL;void append( ) /*录入学生信息*/ Stu *head; Stu *p,*q; char ch; InitStu(&head); q=head; while(1) system("clear"); printf("请录入学生信息n");p=(Stu *)malloc(sizeof(Stu); printf("n*:"); scanf("%d",&p->num); printf("n*:"); scanf("%s",p->name); printf("n性别:"); scanf(" %c",&p->se*); printf("n专业:"); scanf("%s",p->zhuanye); printf("n楼号:"); scanf("%d",&p->lounum); printf("n宿舍号:"); scanf("%d",&p->sushenum); printf("n床号:"); scanf("%d",&p->chuangnum); p->ne*t=q->ne*t; q->ne*t=p; q=p; printf("按任意键继续录入,按0完毕录入");getchar(); ch=getchar(); if(ch='0') break; Write_to_File(head); void Read_from_File(Stu *h) /*读出文件信息*/ FILE *fp; Stu *p,*q; int i; fp=fopen("sushe.t*t","r"); if(fp=NULL) printf("翻开失败"); e*it(0); q=h; while(!feof(fp) p=(Stu *)malloc(sizeof(Stu); i=fscanf(fp,"%d %s %c %s %d %d %dn",&p->num,p->name,&p->se*,p->zhuanye,&p->lounum,&p->sushenum,&p->chuangnum);if(i = EOF)break; q->ne*t=p; q=p; q->ne*t = NULL; fclose(fp);int display() /*显示文件信息*/ Stu *head = NULL; Stu *p; InitStu(&head); Read_from_File(head);/printf("ok!n"); p=head->ne*t; system("clear"); if(!p) printf("无容!"); printf("n按任意键键返回n"); getchar();getchar(); return 0; printf("*性别专业楼号宿舍号床号nn"); while(p) printf("%-8d%-10s%-6c%-14s%-8d%-8d%-5dn",p->num,p->name,p->se*,p->zhuanye, p->lounum,p->sushenum,p->chuangnum); p=p->ne*t; printf("n按任意键返回n"); getchar();getchar(); return 1;void del() /*删除学生信息*/ Stu *head; Stu *p,*q; char ch,h; int N; int lounum,sushenum,chuangnum; InitStu(&head); Read_from_File(head); q=head; p=head->ne*t;dosystem("clear");printf("n1. 根据学生*删除n");printf("n2. 根据宿舍信息删除n");printf("n 请选择删除式:");scanf(" %c", &ch);while(1)if(ch='1')printf("n请输入学生*:");scanf("%d",&N);while(p)if(p->num=N)q->ne*t=p->ne*t;printf("删除成功!");break;q=p;p=p->ne*t;if(p=NULL)printf("n未找到此学生");break;elsefree(p);else if(ch='2')printf("n请输入宿舍信息(楼号宿舍床号):");scanf("%d %d %d",&lounum,&sushenum,&chuangnum);while(p!=NULL)if(p->lounum=lounum && p->sushenum=sushenum && p->chuangnum)q->ne*t=p->ne*t;printf("删除成功!");break;q=p;p=p->ne*t;if(p=NULL)printf("未找到此学生");break;elsefree(p);break;printf("nn是否继续:Y/N.");scanf(" %c", &h);while(h='Y' |h='y');Write_to_File(head);void insert()/*用头插法插入学生信息*/Stu *p , *head;char ch;InitStu(&head);Read_from_File(head);system("clear");do p=(Stu*)malloc(sizeof(Stu);p->ne*t=NULL;printf("tt请输入插入的学生信息 :n ");printf("t *:");scanf("%d",&p->num);printf("nt *:");scanf("%s",p->name);printf("nt性别:"); scanf(" %c",&p->se*);printf("nt 专业:");scanf("%s",p->zhuanye);printf("nt 楼号:");scanf("%d",&p->lounum);printf("nt 宿舍号:");scanf("%d",&p->sushenum);printf("nt 床号:");scanf("%d",&p->chuangnum);p->ne*t = head->ne*t;head->ne*t = p;printf("nn是否继续插入"Y/N");scanf(" %c",&ch);while(ch='y'|ch='Y'); Write_to_File(head);void modify( ) /*修改学生信息按*修改*/Stu *head;Stu *p; char ch; int N; InitStu(&head); Read_from_File(head);system("clear");printf("nn请输入修改的学生*: ");scanf("%d",&N);p=head->ne*t;dowhile(p!=NULL)if(p->num=N)system("clear"); printf("n请输入新的学生信息 :n ");printf("n*:"); scanf("%d",&p->num); printf("n*:"); scanf("%s",p->name); printf("n性别:"); scanf(" %c",&p->se*); printf("n专业:"); scanf("%s",p->zhuanye); printf("n楼号:"); scanf("%d",&p->lounum); printf("n宿舍号:"); scanf("%d",&p->sushenum); printf("n床号:"); scanf("%d",&p->chuangnum);break;p=p->ne*t;if(p=NULL)printf("n未找到此学生");elseprintf("修改成功n"); printf("nn 继续修改 "Y/N");scanf(" %c",&ch);while(ch='y'|ch='Y');Write_to_File(head);void *uehao_search(Stu * head) /*按照学生*查找*/ int num; Stu *p; char ch; p=head->ne*t ; do system("clear"); printf("n请输入要查找的学生* : "); scanf("%d",&num); while(p!=NULL) if(p->num = num )printf("*性别专业楼号宿舍号床号nn"); printf("%-8d%-8s%-4c%-8s%-8d%-8d%-5dn",p->num,p->name,p->se*,p->zhuanye,p->lounum,p->sushenum,p->chuangnum);break;p=p->ne*t; if(p=NULL)printf("n未找到此学生"); printf("nn 继续查找 "Y/N"); scanf("%s",&ch); while(ch='Y' | ch='y');void sushe_search(Stu *head) /*按照宿舍信息查找*/ int lounum,sushenum,chuangnum; Stu *p; char ch; p=head->ne*t; do system("clear"); printf("n请输入要查找的学生宿舍信息(楼号宿舍床号) : "); printf("n 楼号 :"); scanf("%d",&lounum); printf("n 宿舍号 :"); scanf("%d",&sushenum); printf("n 床号 :"); scanf("%d",&chuangnum); while(p!=NULL) if(p->lounum=lounum && p->sushenum=sushenum&&p->chuangnum=chuangnum)printf("*性别专业楼号宿舍号床号nn"); printf("%-8d%-8s%-4c%-8s%-8d%-8d%-5dn",p->num,p->name,p->se*,p->zhuanye,p->lounum,p->sushenum,p->chuangnum);break;p=p->ne*t;if(p=NULL)printf("n未找到此学生"); printf("nn 是否继续 "Y/N");scanf("%s",&ch); while(ch='y' | ch='Y');void Search( ) /*查找学生信息*/ int choose; Stu *head; InitStu(&head); Read_from_File(head); system("clear"); printf("n1.根据宿舍信息查找."); printf("n2.根据学生*查找."); printf("n3.退出.nn"); printf("n请选择查找式:"); scanf("%d",&choose); switch(choose) case 1: sushe_search(head); break;case 2:*uehao_search(head);break; case 3: break; void sort( ) /*将学生信息按*排序*/ Stu *head; Stu *i,*j,*k; Stu *m,*n; Stu *temp; int l=0; InitStu(&head); Read_from_File(head); /冒泡排序法 for(m=head,i=head->ne*t;i;m=i,i=i->ne*t) k=i; for(n=i,j=i->ne*t;j;n=j,j=j->ne*t) if(j->num< k->num)k=j;break; if(i!=k)m->ne*t=j;n->ne*t=i;temp=i->ne*t;i->ne*t=j->ne*t;j->ne*t=temp;i=head; system("clear");printf("nn输入学生信息 : nn"); i=head->ne*t; printf("*性别专业楼号宿舍号床号nn"); while(i) printf("%-8d%-8s%-4c%-8s%-8d%-8d%-5dn",i->num,i->name,i->se*,i->zhuanye,i->lounum,i->sushenum,i->chuangnum); i=i->ne*t; printf("n按任意键返回!"); getchar();getchar();void tongji( ) /*统计学生信息*/Stu *head,*p;int Count1,Count2;InitStu(&head); Read_from_File(head);system("clear");p=head->ne*t;Count1=0;Count2=0;while(p!=NULL)if(p->se*='w' | p->se*='W')Count1+;else Count2+;p=p->ne*t;printf("t女生总数 : %dn ",Count1);printf("t男生总数 : %dn ",Count2);printf("t学生总数 : %dn ",Count1+Count2);printf("t按任意键返回!");getchar();getchar();void main() int choice; char ch; while(1) system("clear"); printf("n 学生宿舍管理系统n");printf("=n");printf(" 1.录入学生信息nn");printf(" 2.删除学生信息nn");printf(" 3.插入学生信息nn");printf(" 4.修改学生信息nn");printf(" 5.显示学生信息nn");printf(" 6.查找学生信息nn");printf(" 7.排序学生信息nn");printf(" 8.统计学生信息nn");printf(" 0.退出系统n");printf("=n");printf(" 请选择0-8:n"); printf("n 请选择要进展的操作 : "); scanf("%d",&choice); switch(choice) case 1: append(); break; case 2: del(); break;case 3: insert(); break;case 4: modify(); break; case 5: display(); break;case 6:Search();break;case 7:sort();break;case 8:tongji();break; case 0: printf("ntt确定退出. (Y/N)"); scanf(" %c", &ch); if(ch='Y'|ch='y')e*it(0); if(ch='N' | ch='n') system("clear"); . z.