《C语言课程设计报告——学生宿舍管理系统(下).pdf》由会员分享,可在线阅读,更多相关《C语言课程设计报告——学生宿舍管理系统(下).pdf(23页珍藏版)》请在三一文库上搜索。
1、. . *大学 C语言课程设计报告 题目:学生宿舍管理系统 系 部 名 称: 专 业 名 称: 班级: 学号: 学 生 姓 名: 指 导 教 师: 时间: . . 一、课程设计目的 1. 设计一个ubuntu 下的学生宿舍管理系统 2. 掌握用 C语言定义单链表结构,并实现其创建、插入、删除等基本操作。 二、课程设计内容 用 C语言编写“学生宿舍管理系统” ,要求如下: 1. 创建链表,录入数据。 2. 数据的读写操作。 3. 数据的更新操作。 4. 数据的删除和插入。 5. 请你要求对数据进行查找。 6. 按要求排序。 7. 设计总体菜单界面。 三、实验要求 1、录入数据 学生的基本信息,包
2、括学号、姓名、性别、年龄、专业、班级等。 宿舍楼的基本信息,包括宿舍楼号、学生所住的房间号和宿舍床位号等。 2、数据存储 信息的录入要求用链表,把输入的信息要求存储到指定文件夹中,以便随 时查看,也可供程序调用,方便操作人员不用重复输入数据。 3、数据的更新 更新包括插入、删除、修改。 删除分根据学号删除和根据学生的楼层信息删除。 5、数据的查询 查询可以根据学号和宿舍信息不同方面进行查询,方便操作者使用。 6、数据的排序 操作者可以使所输入的信息按学号排序。 7、数据的统计 按整体统计,统计所有学生人数,男生人数和女生人数。 四、概要设计 . . 1系统结构图(功能模块图) 2功能模块说明:
3、 (1). 数据录入:创建单链表,调用 Initnode()函数申请头结点,在调用 append() , 在调用 Write_to_File()函数将信息写入文件中, (2) 插入模块:先将文件信息读出,再调用insert()函数,可以向文件中插入 信息。 (3) 插入模块:先将文件信息读出,再调用del() 函数,可以将输入错误或者 需要的信息删除。 (4) 修改模块:先将文件信息读出,再调用modify() 函数,将输入错误的信息 修改。 (5) 查询模块:先将文件信息读出, 再调用 search(),在 search() 中有调用两个 数, 一个按照宿舍信息查询sushe_search(
4、),需要楼号和宿舍号, 一个按照生信息查询xuehao_search() 需要学生学号或者姓名。 (6) 排序模块:先将文件信息读出,再调用sort (),按照学生学号排序,拍完 续没有直接写入文件,如果要直接写入调用文件读入函数 Write_to_File(). (7) 统计模块:先将文件信息读出,再调用tongji()函数,统计了女生人数和 男生人数,还统计了总人数. 主 函 数 录入存储 数据操作 输出信息 输入 统计 查找 修改 删除 插入 显示 排序 . . 五详细过程和运行结果: 删除模块 != = 插入模块 开始 输入要删除学生的学号num p-num:num 删除该学生信息 结
5、束 组织循环,扫描存储学生 信息的链表 开始 头插入学生信息 输入插入的学生信息 将其入栈,即将插入的学 生信息插到了最前面 . . 查找模块 != != 开始 选择查找方式 按学生学号查找 输入要查找的学生 学号 num p-num:num 输出该学生的信息 按宿舍信息查找 输 入 要 查 找 的 学 生 lounum,sushenum,chuang num p-lounum:sushenu p-sushenum:sushenu p-chuangnum:chuangnu 输出该学生信息 结束 组织循环, 扫描存储 学生信息的链表表 结束 . . 修改模块 != = 开始 输入要修改的学生学号
6、num 组织循环,扫描存储学 生信息的链表表 p-num:num 修改学生信息 . . 排序模块 结束 开始 组织循环,扫描存 储学生信息的链表 选出学号最小的学生,与第一 学生交换存储位置 在余下的学生中选出学号最小的学生与 第二个学生交换存储位置 以此类推,直至排序完成 . . 统计模块 开始 组织循环,扫描存储学 生信息的链表表 p-sex=w p-sex=m Count1+ Count2+ 结束 . . 六参考文献: C语言程序设计 : 王曙燕 七源代码 #include #include #include /#include typedef struct Student int nu
7、m; /*学号 */ char name15; /*姓名 */ char sex; /*性别 */ char zhuanye20; /*专业 */ 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(); g
8、etchar(); exit(0); p=L-next; while(p) fprintf(fp,“%d %s %c %s %d %d %dn“,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; .
9、 . void append( ) /*录入学生信息*/ Stu *head; Stu *p,*q; char ch; InitStu( q=head; while(1) system(“clear“); printf(“请录入学生信息n“); p=(Stu *)malloc(sizeof(Stu); printf(“n学号 :“); scanf(“%d“, printf(“n姓名 :“); scanf(“%s“,p-name); printf(“n性别 :“); scanf(“ %c“, printf(“n专业 :“); scanf(“%s“,p-zhuanye); printf(“n楼号
10、:“); scanf(“%d“, printf(“n宿舍号 :“); scanf(“%d“, printf(“n床号 :“); scanf(“%d“, 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(f
11、p=NULL) printf(“打开失败 “); exit(0); q=h; while(!feof(fp) p=(Stu *)malloc(sizeof(Stu); i=fscanf(fp,“%d %s %c %s %d %d %dn“, if(i = EOF) break; q-next=p; q=p; q-next = NULL; fclose(fp); int display() /*显示文件信息 */ Stu *head = NULL; Stu *p; InitStu( Read_from_File(head); /printf(“ok!n“); p=head-next; syste
12、m(“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-sex,p-zhuanye, p-lounum,p-sushenum,p-chuangnum); p=p-next; printf(“n按任意键返回 n“); getchar(); getchar(); return 1;
13、void del() /*删除学生信息*/ Stu *head; Stu *p,*q; char ch,h; int N; int lounum,sushenum,chuangnum; InitStu( Read_from_File(head); q=head; p=head-next; do system(“clear“); printf(“n1. 根据学生学号删除n“); printf(“n2. 根据宿舍信息删除n“); printf(“n 请选择删除方式:“); scanf(“ %c“, while(1) if(ch=1) printf(“n请输入学生学号:“); scanf(“%d“,
14、 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“, while(p!=NULL) if(p-lounum=lounum printf(“删除成功! “); break; q=p; p=p-next; if(p=NULL) printf(“未找到此学生“); b
15、reak; else free(p); break; . . printf(“nn是否继续:Y/N?“); scanf(“ %c“, while(h=Y |h=y); Write_to_File(head); void insert() /* 用头插法插入学生信息*/ Stu *p , *head; char ch; InitStu( Read_from_File(head); system(“clear“); do p=(Stu*)malloc(sizeof(Stu); p-next=NULL; printf(“tt请输入插入的学生信息 :n “); printf(“t 学号 :“); sc
16、anf(“%d“, printf(“nt 姓名 :“); scanf(“%s“,p-name); printf(“nt性别 :“); scanf(“ %c“, printf(“nt 专业 :“); scanf(“%s“,p-zhuanye); printf(“nt 楼号 :“); scanf(“%d“, . . printf(“nt 宿舍号 :“); scanf(“%d“, printf(“nt 床号 :“); scanf(“%d“, p-next = head-next; head-next = p; printf(“nn是否继续插入?Y/N“); scanf(“ %c“, while(ch
17、=y|ch=Y); Write_to_File(head); void modify( ) /*修改学生信息(按学号修改)*/ Stu *head; Stu *p; char ch; int N; InitStu( Read_from_File(head); system(“clear“); printf(“nn请输入修改的学生学号: “); scanf(“%d“, p=head-next; do while(p!=NULL) if(p-num=N) system(“clear“); printf(“n请输入新的学生信息 :n “); printf(“n学号 :“); scanf(“%d“,
18、printf(“n姓名 :“); . . scanf(“%s“,p-name); printf(“n性别 :“); scanf(“ %c“, printf(“n专业 :“); scanf(“%s“,p-zhuanye); printf(“n楼号 :“); scanf(“%d“, printf(“n宿舍号 :“); scanf(“%d“, printf(“n床号 :“); scanf(“%d“, break; p=p-next; if(p=NULL) printf(“n未找到此学生 “); else printf(“修改成功 n“); printf(“nn 继续修改 ?Y/N“); scanf(
19、“ %c“, 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“, while(p!=NULL) if(p-num = num ) printf(“学号姓名性别专业楼号宿舍号床号 nn“); printf(“%-8d%-8s%-4c%-8s%-8d%-8d%-5dn“,p-num,
20、p-name,p-sex,p-zhuanye, p-lounum,p-sushenum,p-chuangnum); break; p=p-next; if(p=NULL) printf(“n未找到此学生 “); printf(“nn 继续查找 ?Y/N“); scanf(“%s“, 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请输入要查找
21、的学生宿舍信息( 楼号宿舍床号 ) : “); printf(“n 楼号 :“); scanf(“%d“, printf(“n 宿舍号 :“); scanf(“%d“, printf(“n 床号 :“); scanf(“%d“, while(p!=NULL) if(p-lounum=lounum printf(“%-8d%-8s%-4c%-8s%-8d%-8d%-5dn“,p-num,p-name,p-sex, p-zhuanye, p-lounum,p-sushenum,p-chuangnum); break; p=p-next; if(p=NULL) printf(“n未找到此学生 “);
22、 printf(“nn 是否继续 ?Y/N“); scanf(“%s“, while(ch=y | ch=Y); void Search( ) /*查找学生信息*/ int choose; Stu *head; InitStu( Read_from_File(head); system(“clear“); printf(“n1.根据宿舍信息查找.“); printf(“n2.根据学生学号查找.“); printf(“n3.退出 .nn“); printf(“n请选择查找方式:“); scanf(“%d“, switch(choose) case 1: sushe_search(head); b
23、reak; 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( 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-numnum) k=j; break; if(i!=k) m-next
24、=j; n-next=i; temp=i-next; i-next=j-next; j-next=temp; i=head; system(“clear“); printf(“nn输入学生信息 : nn“); i=head-next; printf(“学号姓名性别专业楼号宿舍号床号 nn“); while(i) printf(“%-8d%-8s%-4c%-8s%-8d%-8d%-5dn“,i-num,i-name,i-sex, i-zhuanye, i-lounum,i-sushenum,i-chuangnum); i=i-next; printf(“n按任意键返回 !“); getchar(
25、); getchar(); . . void tongji( ) /*统计学生信息*/ Stu *head,*p; int Count1,Count2; InitStu( Read_from_File(head); system(“clear“); p=head-next; Count1=0; Count2=0; while(p!=NULL) if(p-sex=w | p-sex=W) Count1+; else Count2+; p=p-next; printf(“t女生总数 : %dn “,Count1); printf(“t男生总数 : %dn “,Count2); printf(“t学
26、生总数 : %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.查找学
27、生信息nn“); printf(“ 7.排序学生信息nn“); printf(“ 8.统计学生信息nn“); printf(“ 0.退 出 系 统 n“); printf(“=n“); printf(“ 请选择 0-8:n“); printf(“n 请选择要进行的操作 : “); scanf(“%d“, 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“, if(ch=Y|ch=y) exit(0); if(ch=N | ch=n) system(“clear“);
链接地址:https://www.31doc.com/p-5595232.html