当前位置:文档之家› C语言课程设计报告——学生宿舍管理系统(下)

C语言课程设计报告——学生宿舍管理系统(下)

****大学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(),需要楼号和宿舍号,一个按照生信息查询xuehao_search()需要学生学号或者姓名。

(6) 排序模块:先将文件信息读出,再调用sort (),按照学生学号排序,拍完续没有直接写入文件,如果要直接写入调用文件读入函数Write_to_File().(7) 统计模块:先将文件信息读出,再调用tongji()函数,统计了女生人数和男生人数,还统计了总人数.五.详细过程和运行结果:删除模块插入模块查找模块修改模块排序模块统计模块六.参考文献:《C语言程序设计》: 王曙燕.七.源代码#include <stdio.h>#include <stdlib.h>#include <string.h>//#include <conio.h>typedef struct Student{int num; /*学号*/char name[15]; /*姓名*/char sex; /*性别*/char zhuanye[20]; /*专业*/int lounum; /*楼号*/int sushenum; /*宿舍号*/int chuangnum; /*床号*/struct Student *next;}Stu;void Write_to_File(Stu *L) /*将信息写入文件*/{FILE *fp;Stu *p;fp=fopen("sushe.txt","w");if(fp==NULL){printf("打开失败!");getchar();getchar();exit(0);}p=L->next;while(p){fprintf(fp,"%d %s %c %s %d %d %d\n",p->num,p->name,p->sex,p->zhuanye,p->lounum,p->sushenum,p->chuangnum);p=p->next;}fclose(fp);}void InitStu(Stu **h) /*创建头结点*/ {(*h)=(Stu *)malloc(sizeof(Stu));if(h==NULL){printf("创建失败!!");getchar();getchar();exit(0);}(*h)->next=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->sex);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->next=q->next;q->next=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.txt","r");if(fp==NULL){printf("打开失败");exit(0);}q=h;while(!feof(fp)){p=(Stu *)malloc(sizeof(Stu));i=fscanf(fp,"%d %s %c %s %d %d %d\n",&p->num,p->name,&p->sex, p->zhuanye,&p->lounum,&p->sushenum,&p->chuangnum);if(i == EOF)break;q->next=p;q=p;}q->next = NULL;fclose(fp);}int display() /*显示文件信息*/{Stu *head = NULL;Stu *p;InitStu(&head);Read_from_File(head);//printf("ok!\n");p=head->next;system("clear");if(!p){printf("无内容!");printf("\n按任意键键返回\n");getchar();getchar();return 0;}printf("学号姓名性别专业楼号宿舍号床号\n\n");while(p){printf("%-8d%-10s%-6c%-14s%-8d%-8d%-5d\n",p->num,p->name,p->sex,p->zhuanye, p->lounum,p->sushenum,p->chuangnum);p=p->next;}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->next;do{system("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->next=p->next;printf("删除成功!");break;}q=p;p=p->next;}if(p==NULL){printf("\n未找到此学生");break;}else{free(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->next=p->next;printf("删除成功!");break;}q=p;p=p->next;}if(p==NULL){printf("未找到此学生");break;}else{free(p);}}break;}printf("\n\n是否继续: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->next=NULL;printf("\t\t请输入插入的学生信息:\n ");printf("\t 学号:");scanf("%d",&p->num);printf("\n\t 姓名:");scanf("%s",p->name);printf("\n\t性别:");scanf(" %c",&p->sex);printf("\n\t 专业:");scanf("%s",p->zhuanye);printf("\n\t 楼号:");scanf("%d",&p->lounum);printf("\n\t 宿舍号:");scanf("%d",&p->sushenum);printf("\n\t 床号:");scanf("%d",&p->chuangnum);p->next = head->next;head->next = p;printf("\n\n是否继续插入?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("\n\n请输入修改的学生学号: ");scanf("%d",&N);p=head->next;do{while(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->sex);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->next;}if(p==NULL)printf("\n未找到此学生");else{printf("修改成功\n");}printf("\n\n 继续修改?Y/N");scanf(" %c",&ch);}while(ch=='y'||ch=='Y');Write_to_File(head);}void xuehao_search(Stu * head) /*按照学生学号查找*/{int num;Stu *p;char ch;p=head->next ;do{system("clear");printf("\n请输入要查找的学生学号: ");scanf("%d",&num);while(p!=NULL){if(p->num == num ){printf("学号姓名性别专业楼号宿舍号床号\n\n");printf("%-8d%-8s%-4c%-8s%-8d%-8d%-5d\n",p->num,p->name,p->sex,p->zhuanye,p->lounum,p->sushenum,p->chuangnum);break;}p=p->next;}if(p==NULL)printf("\n未找到此学生");printf("\n\n 继续查找?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->next;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("学号姓名性别专业楼号宿舍号床号\n\n");printf("%-8d%-8s%-4c%-8s%-8d%-8d%-5d\n",p->num,p->name,p->sex,p->zhuanye,p->lounum,p->sushenum,p->chuangnum);break;}p=p->next;}if(p==NULL)printf("\n未找到此学生");printf("\n\n 是否继续?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.退出.\n\n");printf("\n请选择查找方式:");scanf("%d",&choose);switch(choose){case 1:sushe_search(head);break;case 2:xuehao_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->next;i;m=i,i=i->next){k=i;for(n=i,j=i->next;j;n=j,j=j->next){if(j->num< k->num){k=j;break;}}if(i!=k){m->next=j;n->next=i;temp=i->next;i->next=j->next;j->next=temp;i=head;}}system("clear");printf("\n\n输入学生信息: \n\n");i=head->next;printf("学号姓名性别专业楼号宿舍号床号\n\n");while(i){printf("%-8d%-8s%-4c%-8s%-8d%-8d%-5d\n",i->num,i->name,i->sex, i->zhuanye,i->lounum,i->sushenum,i->chuangnum);i=i->next;}printf("\n按任意键返回!");getchar();getchar();}void tongji( ) /*统计学生信息*/{Stu *head,*p;int Count1,Count2;InitStu(&head);Read_from_File(head);system("clear");p=head->next;Count1=0;Count2=0;while(p!=NULL){if(p->sex=='w' || p->sex=='W'){Count1++;}elseCount2++;}p=p->next;}printf("\t女生总数: %d\n ",Count1);printf("\t男生总数: %d\n ",Count2);printf("\t学生总数: %d\n ",Count1+Count2);printf("\t按任意键返回!");getchar();getchar();}void main(){int choice;char ch;while(1){system("clear");printf("\n 学生宿舍管理系统\n");printf("=========================================\n");printf(" 1.录入学生信息\n\n");printf(" 2.删除学生信息\n\n");printf(" 3.插入学生信息\n\n");printf(" 4.修改学生信息\n\n");printf(" 5.显示学生信息\n\n");printf(" 6.查找学生信息\n\n");printf(" 7.排序学生信息\n\n");printf(" 8.统计学生信息\n\n");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("\n\t\t确定退出?(Y/N)");scanf(" %c", &ch);if(ch=='Y'||ch=='y')exit(0);if(ch=='N' || ch=='n'){system("clear");}}}。

相关主题