宿舍管理系统c语言设计
- 格式:doc
- 大小:362.65 KB
- 文档页数:40
宿舍管理系统c语言课程设计一、背景介绍宿舍管理系统是一种为学校宿舍管理人员提供便利的软件系统。
本系统旨在通过计算机技术的应用,实现对宿舍信息、学生信息、入住情况等数据的管理和统计,提高宿舍管理工作效率和服务质量。
二、需求分析1. 功能需求(1)管理员登录:管理员需要输入用户名和密码才能登录系统。
(2)学生信息录入:管理员可以添加、修改和删除学生信息,包括姓名、性别、年龄、联系方式等。
(3)宿舍信息录入:管理员可以添加、修改和删除宿舍信息,包括宿舍号码、楼层、床位数等。
(4)学生入住登记:管理员可以登记学生入住情况,包括选择宿舍房间号码,记录入住时间等。
(5)查询统计功能:管理员可以查询学生信息、宿舍信息以及入住情况,并进行统计分析。
2. 性能需求本系统需要具有较高的安全性和稳定性,保证数据的完整性和可靠性。
同时,在用户界面设计上要简洁明了,易于操作。
三、设计方案1. 系统架构本系统采用客户端/服务器模式,将客户端与服务器分离,实现系统的分布式部署。
客户端负责用户界面的展示和用户输入的响应,服务器负责数据存储和处理。
2. 数据库设计本系统需要设计三个数据库表:学生信息表、宿舍信息表和入住情况表。
学生信息表包括学生姓名、性别、年龄、联系方式等字段;宿舍信息表包括宿舍号码、楼层、床位数等字段;入住情况表包括学生姓名、宿舍号码、入住时间等字段。
3. 界面设计本系统的用户界面需要简洁明了,易于操作。
采用菜单式界面设计,将各个功能模块以菜单形式呈现,方便用户进行选择。
四、开发实现1. 开发环境本系统采用C语言进行开发,使用Visual Studio 2019作为开发工具。
数据库采用MySQL。
2. 关键技术(1)C语言编程技术:C语言是一种高效的编程语言,在系统开发中具有广泛应用。
(2)MySQL数据库技术:MySQL是一种常用的关系型数据库管理系统,在数据存储和处理方面具有很好的性能。
(3)网络编程技术:客户端/服务器模式需要使用网络编程技术实现客户端与服务器之间的通信。
#include"stdio.h"int main_menu_select() /*主菜单选择*/ {char s;printf("\n1 Administrator in charge of the students and books' information\n");printf("\n2 Administrator in charge of lend books\n");printf("\n3 Administrator in charge of receive books\n");printf("\n4 Student\n");printf("\n5 Guest\n");printf("\n6 exit\n\n");printf("\n input 1-6 to choice the function\n");do{s=getche();printf("\n");}while(s<49||s>54);return s;}int administrator_menu_select() /*管理员菜单选择*/ {int s;printf("input 1-6 to choice the function\n");printf("1 input the information of books\n");printf("2 recompose the information of the books\n");printf("3 cancel the information of books \n");printf("4 input the information of students\n");printf("5 recompose information of the students\n");printf("6 cancel the information of students\n");printf("7 return main menu\n");printf("8 exit\n\n" );do{s=getche();printf("\n");}while(s<49||s>56);return s;}hello_main() /*返回主菜单*/ {for(; ;){switch(main_menu_select()){case 49:adm_information();break;case 51:printf("hellooo");break;case 52:printf("helloooo");break;case 53:printf("hellooooo");break;case 54:printf("Goodbye!");exit(0);}}}hello_adm_menu() /*返回管理员功能选择菜单*/ {for(; ;){switch(administrator_menu_select()){case 49:books_information_input();break;case 50:printf("Student\n");break;case 51:printf("Guest\n");break;case 52:students_information_input();break;case 53:printf("Guest of gentleman\n");break;case 54:printf("hahha");break;case 55:hello_main();break;case 56:printf("Goodbye!");exit(0);}}}struct /*图书结构体*/ {int number;char name[20];char press[20];char writer[20];int price;}books[200];struct /*学生结构体*/ {int number;char name[20];char sex[6];int grade;}students[200];adm_information() /*管理员菜单*/ {for(; ;){switch(administrator_menu_select()){case 49:books_information_input();break;case 51:printf("Guest\n");break;case 52:students_information_input();break;case 53:printf("Guest of gentleman\n");break;case 54:printf("hahha");break;case 55:hello_main();break;case 56:printf("Goodbye!");exit(0);}}}int books_information_input() /*图书信息输入函数*/ {int m,i,s;char h;printf("input the number of the books you want to operate:");scanf("%d",&m);for(i=1;i<m+1;i++){printf("please input the %dth book's number:",i);scanf("%d",&books[i].number);printf("\n please input the %dth book's name:",i);scanf("%s",books[i].name);printf("\n please input the %dth book's press:",i);scanf("%s",books[i].press);printf("\n please input the %dth book's writer:",i);scanf("%s",books[i].writer);printf("\n please input the %dth book's price:",i);scanf("%d",&books[i].price);printf("\n\n");}printf("\ninformation of the students has been inputed\n");printf("1 to return higher menu\n"); /*返回上一级菜单,即管理员选择功能菜单*/h=getche();if(h==1)hello_adm_menu();}students_information_input() /*学生信息输入函数*/ {int m,i,s;printf("input the number of the students you want to operate:");scanf("%d",&m);for(i=1;i<m+1;i++){printf("\nplease input the %dth student's number:",i);scanf("%d",&students[i].number);printf("\n please input the %dth student's name:",i);scanf("%s",students[i].name);printf("\n please input the %dth student's sex:",i);scanf("%s",students[i].sex);printf("\n please input the %dth student's grade:",i);scanf("%d",&students[i].grade);}printf("\ninformation of the books has been inputed\n\n"); }main(){for(; ;){switch(main_menu_select()){case 49:adm_information();break;case 50:printf("helloo");break;case 51:printf("hellooo");break;case 52:printf("helloooo");break;case 53:printf("hellooooo");break;case 54:printf("Goodbye!");exit(0);}}}。
c语言课课程设计宿舍管理一、教学目标本节课的学习目标包括以下三个方面:1.知识目标:学生需要掌握C语言的基本语法和编程技巧,了解宿舍管理系统的需求和功能,并能够运用C语言实现简单的宿舍管理系统。
2.技能目标:学生能够运用所学的C语言知识,进行编程实践,培养解决问题的能力和创新思维。
3.情感态度价值观目标:培养学生对计算机科学的兴趣,增强学生自主学习的能力和团队合作意识。
在制定教学目标时,充分考虑了课程性质、学生特点和教学要求,将目标分解为具体的学习成果,以便后续的教学设计和评估。
二、教学内容本节课的教学内容主要包括以下几个部分:1.C语言基本语法和编程技巧,包括变量、数据类型、运算符、控制结构等。
2.宿舍管理系统的需求分析和功能介绍。
3.使用C语言实现宿舍管理系统的基本功能。
教学内容的选择和确保了科学性和系统性,详细的教学大纲明确了教学内容的安排和进度,教材的章节和列举的内容也与教学目标相符合。
三、教学方法为了激发学生的学习兴趣和主动性,本节课将采用多种教学方法,包括:1.讲授法:讲解C语言的基本语法和编程技巧。
2.案例分析法:通过分析宿舍管理系统的需求和功能,引导学生运用C语言进行编程实践。
3.实验法:学生在实验室进行编程实践,培养解决问题的能力和创新思维。
通过多样化的教学方法,使学生能够在实践中掌握C语言的知识和技能。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,本节课将使用以下教学资源:1.教材:C语言编程教程,用于讲解C语言的基本语法和编程技巧。
2.多媒体资料:包括宿舍管理系统的需求分析和功能介绍的PPT,以及相关的编程案例和实验指导书。
3.实验设备:计算机和网络设备,用于学生进行编程实践和实验。
通过以上教学资源的选择和准备,能够有效地支持教学活动的开展,提高学生的学习效果。
五、教学评估为了全面、客观、公正地评估学生的学习成果,本节课将采用以下评估方式:1.平时表现:通过观察学生在课堂上的参与程度、提问回答、小组讨论等表现,评估学生的学习态度和理解程度。
c语言课程设计宿舍管理一、课程目标知识目标:1. 学生能够理解C语言在开发宿舍管理系统中的应用,掌握基本的数据类型、变量定义、运算符、控制结构等基础知识。
2. 学生能够掌握C语言中的数组、函数、指针等高级概念,并能运用到宿舍管理系统的设计与实现中。
3. 学生能够通过课程学习,了解文件操作在C语言中的实现,实现对宿舍管理数据的存储和读取。
技能目标:1. 学生能够运用C语言编写简单的宿舍管理系统程序,实现宿舍基本信息录入、查询、修改和删除等功能。
2. 学生能够通过课程实践,掌握编程规范,养成良好的编程习惯,提高解决问题的能力。
3. 学生能够通过小组合作,培养团队协作能力和沟通能力,共同完成宿舍管理系统的设计与实现。
情感态度价值观目标:1. 学生能够认识到编程在现实生活中的应用价值,激发对计算机科学的兴趣和热情。
2. 学生能够在课程学习过程中,培养耐心、细心和勇于克服困难的品质,增强自信心。
3. 学生能够通过课程学习,认识到团队合作的重要性,树立正确的价值观,尊重他人的贡献。
本课程针对高中年级学生,结合C语言课程特点,注重理论与实践相结合,以宿舍管理系统为实际案例,引导学生掌握C语言基础知识,培养编程技能和团队协作能力。
课程目标具体、可衡量,旨在使学生在完成课程学习后,能够独立完成简单的宿舍管理系统设计与实现,为后续计算机课程学习打下坚实基础。
二、教学内容1. C语言基础知识回顾:- 数据类型、变量定义、常量- 运算符、表达式、赋值语句- 控制结构:顺序结构、选择结构、循环结构2. C语言高级概念:- 数组:一维数组、二维数组- 函数:函数定义、调用、参数传递、递归- 指针:指针定义、指针与数组、指针与函数3. 文件操作:- 文件打开与关闭- 文件读写操作- 文件定位4. 宿舍管理系统设计与实现:- 系统需求分析- 功能模块设计:宿舍信息录入、查询、修改、删除- 编程实现各功能模块5. 课程实践与团队协作:- 编程规范与调试技巧- 小组合作完成宿舍管理系统- 成果展示与评价教学内容依据课程目标,结合教材相关章节,确保科学性和系统性。
C 宿舍管理系统 课程设计一、课程目标知识目标:1. 让学生理解宿舍管理系统的基本概念,掌握其功能模块和操作流程;2. 使学生掌握数据库设计原则,能运用所学知识构建宿舍管理系统数据库;3. 帮助学生掌握C语言编程技巧,实现宿舍管理系统的功能需求。
技能目标:1. 培养学生运用C语言进行编程的能力,能够独立完成宿舍管理系统的功能模块编写;2. 提高学生分析问题、解决问题的能力,使其能够针对宿舍管理中的实际问题提出合理的解决方案;3. 培养学生团队协作能力,能够在小组合作中发挥各自优势,共同完成项目任务。
情感态度价值观目标:1. 激发学生对计算机编程的兴趣,培养其主动学习的态度;2. 培养学生认真负责的工作态度,使其在项目实施过程中注重细节,追求卓越;3. 引导学生关注宿舍管理问题,培养其主人翁意识,提高社会责任感。
课程性质:本课程为实践性较强的课程,旨在让学生通过实际项目开发,将所学知识运用到实际工作中。
学生特点:学生具备一定的C语言基础,对编程有一定了解,但缺乏实际项目经验。
教学要求:注重理论与实践相结合,强调动手实践,培养学生解决实际问题的能力。
在教学过程中,将目标分解为具体的学习成果,以便进行教学设计和评估。
二、教学内容1. 宿舍管理系统概述:介绍宿舍管理系统的基本概念、功能需求及系统架构,关联课本第1章内容。
2. 数据库设计:讲解数据库设计原则,指导学生运用所学知识构建宿舍管理系统数据库,关联课本第3章内容。
- 数据库表设计- 关系映射- 数据库操作3. C语言编程基础:复习C语言基础知识,重点讲解编程技巧,关联课本第2章内容。
- 数据类型与变量- 控制语句- 函数与模块化编程4. 宿舍管理系统功能模块实现:根据需求分析,运用C语言编程实现宿舍管理系统的功能模块,关联课本第4章内容。
- 学生信息管理- 宿舍楼信息管理- 宿舍分配与调整- 费用管理5. 系统测试与优化:教授系统测试方法,引导学生对宿舍管理系统进行测试与优化,关联课本第5章内容。
宿舍管理系统c语言程序设计#include stdio.h//*库函数#include stdlib.h#include string.h#include conio.h int m;//*控制登陆界面菜单显示项目的全局变量int num;//控制学号的全局变量int orn;//控制日志顺序号的全局变量int printnote(void);//日志菜单打印函数函数声明struct note*creatnote(void);//创建日志函数void savenote(struct note*head1);//保存日志函数struct note*readnote(void);//从磁盘中读取日志函数void readoutnote(void);//读取日志并显示在屏幕上的函数void show1(void);int searchnote(struct note*head1);//查找日志函数int addnote(void);//添加日志函数int deleteinfonote(void);//删除日志函数struct node*read1(void);void readout(void);//*链表从文件中读取并显示在屏幕上函数struct node*creat(void);//*链表的创建函数int print1(void);int print2(void);//*登陆菜单的打印函数int login(void);//*登陆程序函数void show(void);//*信息管理菜单的显示函数void save(struct node*);//*在磁盘中保存文件的函数void choose(int);//*信息管理菜单的选择函数int search(struct node*);//*信息查询函数int deleteinfo(void);//*信息删除函数int add(void);//*信息添加函数int modify();//*信息修改函数void total(struct node*);//*信息统计函数struct node//*学生宿舍信息的结构体创建{char name[30];//*数据域char Class[30];char sex;int age;long int stunum;int dornum;int roomnum;struct node*next;//*指针域};struct user//*登陆信息结构体创建{char username[15],password[15];}user,t;struct note//日志结构体{int ordernum;char notes[80];int year;int month;int day;struct note*next;};int printnote(void)//日志菜单打印函数{int a;printf("*\n");printf("\n");printf("--欢迎查看管理员日志--\n");printf("\n");printf("▲1.创建日志!");printf("▲2.查看日志!");printf("▲3.写日志!");printf("▲4.删除日志\n");printf("\n");printf("*\n");printf("★请输入你的选择!\n");scanf("%d",&a);return(a);}struct note*creatnote(void)//*创建日志链表函数{struct note*head1,*p1,*p2;int i;char c='y';head1=(struct note*)malloc(sizeof(struct note));//*创建头结点head1-next=NULL;p1=head1;show1();for(i=0;c=='y';)//*输入信息{system("cls");p2=(struct note*)malloc(sizeof(struct note));printf("◆输入第%d条信息:\n",++i);scanf("%d",&p2-ordernum);fflush(stdin);gets(p2-notes);fflush(stdin);scanf("%d",&p2-year);scanf("%d",&p2-month);scanf("%d",&p2-day);p1-next=p2;p1=p2;printf("★还要输入信息吗,输入(y or n?)\n");c=getch();fflush(stdin);system("cls");}p1-next=NULL;return(head1);}void savenote(struct note*head1)//*保存日志文件{struct note*p2;FILE*fp;if((fp=fopen("f:/2.txt","wt"))==NULL){printf("写文件出错,按任意键退出!");getch();exit(1);}for(p2=head1-next;p2!=NULL;p2=p2-next)fprintf(fp,"%d\t%s\t\t\t%d%d%d\n",p2-ordernum,p2-notes,p2-year,p2-month,p2-day);getch();fclose(fp);}struct note*readnote(void)//从日志中文件读取出来{struct note*head1,*p1,*p2;FILE*fp;if((fp=fopen("f:/2.txt","rt"))==NULL){printf("读取信息错误!,按任意键退出!");getch();exit(1);}head1=(struct note*)malloc(sizeof(struct note));head1-next=NULL;p1=head1;while(!feof(fp)){p2=(struct note*)malloc(sizeof(struct note));fscanf(fp,"%d\t%s\t\t\t%d%d%d\n",&p2-ordernum,p2-notes,&p2-year,&p2-month,&p2-day);p1-next=p2;p1=p2;}p1-next=NULL;fclose(fp);return(head1);}void readoutnote(void)//*从磁盘中读取信息显示在屏幕上{struct note*head1,*p1,*p2;FILE*fp;if((fp=fopen("f:/2.txt","rt"))==NULL){printf("读取信息错误!,按任意键退出!");getch();exit(1);}head1=(struct note*)malloc(sizeof(struct note));head1-next=NULL;p1=head1;printf("序列号\t事件\t\t\t\t\t日期\n");while(!feof(fp)){p2=(struct note*)malloc(sizeof(struct note));fscanf(fp,"%d\t%s\t\t\t\t\t%d%d%d\n",&p2-ordernum,p2-notes,&p2-year,&p2-month,&p2-day);printf("\n");printf("%d\t%s\t\t%d%d%d\n",p2-ordernum,p2-notes,p2-year,p2-month,p2-day);printf("\n");p1-next=p2;p1=p2;}p1-next=NULL;fclose(fp);}int searchnote(struct note*head1)//*日志信息查询{int a=0;struct note*p1,*p2;p1=head1;printf("★请你输入你想要查询的事件号!\n");fflush(stdin);scanf("%d",&orn);fflush(stdin);while(p1!=NULL){if(p1-ordernum==orn){printf("★查询成功!找到该信息:\n");printf("序列号\t实际事件\t\t\t日期\n");printf("%d\t%s\t\t\t%d%d%d\n",p1-ordernum,p1-notes,p1-year,p1-month,p1-day);a=1;return a;}p2=p1;head1=p1-next;p1=head1;}if(p2-ordernum!=orn){printf("★对不起!序列号错误!找不到该信息!\n");return a;return a;}int addnote(void)//*日志信息添加{struct note*p,*p1,*head1;head1=readnote();p=(struct note*)malloc(sizeof(struct note));printf("★输入信息:\n");printf("序列号\t实际事件\t日期\n");scanf("%d",&p-ordernum);fflush(stdin);gets(p-notes);fflush(stdin);scanf("%d",&p-year);scanf("%d",&p-month);scanf("%d",&p-day);p1=head1;while(p1-next!=NULL){p1=p1-next;p1-next=p;p-next=NULL;p1=p;savenote(head1);readoutnote();return(1);}int deleteinfonote(void)//*日志信息删除{char c;int a;struct note*head1,*p1,*p2;head1=readnote();a=searchnote(head1);p1=head1-next;p2=head1;if(p1==NULL)return 0;if(a)printf("★您要删除此条信息吗?\n");printf("★确定请按y键,取消请按n键!(y or n?)\n");scanf("%c",&c);if(c=='y')//*删除结点{while(p1!=NULL){if(p1-ordernum==orn){p2-next=p1-next;free(p1);savenote(head1);readoutnote();return 1;}p2=p1;p1=p1-next;}}return 0;}int print1(void)//*登陆菜单打印{printf("\n");printf("\n");printf("\n");printf("\t*欢迎登陆西邮学生宿舍信息管理系统!*\n");printf("\t*班级:计科0803!*\n");printf("\t*作者:高朋辉!*\n");printf("\n");printf("\n");printf("\n");printf("|*|\n");printf("\t\t|◆1注册:\n");printf("\t\t|◆2登陆:\n");printf("\t\t|◆3退出:\n");printf("|*|\n");printf("请按序号输入你的选择:\n");scanf("%d",&m);return(m);}int login(void)//*登陆程序{int flag=1,str1,str2,time=0;int i,n=0;char ch=0;FILE*fp;while(flag){switch(m){case 1:printf("\n");printf("*");printf("\n");printf("★!注册小提示:用户名和密码不得超过15个字符!\n");printf("\n");fp=fopen("f:/password.txt","wt");if(fp==NULL){printf("★对不起,此文件打不开:\n");getch();exit(1);}printf("★请输入你的用户名:\n");fflush(stdin);gets(ername);fflush(stdin);printf("★请你输入密码:\n");ch=getch();i=0;while(ch!='\r'){user.password[i]=ch;printf("*");if(ch==8){printf("\b\b\b\b");i--;}else i++;ch=getch();fflush(stdin);}user.password[i]='[message]';fprintf(fp,"%s\n%s\n",ername,user.password);fclose(fp);flag=0,n=1;printf("\n");printf("★注册成功!\n");system("cls");break;case 2:fp=fopen("f:/password.txt","rt");if(fp==NULL){printf("对不起,此文件打不开:\n");getch();exit(1);}fscanf(fp,"%s\n%s\n",ername,user.password);fclose(fp);printf("★请输入你的用户名:\n");fflush(stdin);gets(ername);fflush(stdin);printf("★请你输入密码:\n");ch=getch();i=0;while(ch!='\r'){t.password[i]=ch;printf("*");if(ch==8){printf("\b\b\b\b");i--;}else i++;ch=getch();fflush(stdin);}t.password[i]=0;str1=strcmp(ername,ername);str2=strcmp(t.password,user.password);if(str1==0&&str2==0){system("cls");printf("★成功登录!\n");return(1);}else{printf("\n★登录失败,请重新登录!\n");time++;if(time==3)//登陆次数超过三次自动退出{printf("★你超过登陆次数,对不起!");exit(1);}}break;case 3:exit(1);break;}}print1();flag=1;if(n){switch(m){case 1:printf("你已经注册,请你登陆!\n");break;case 2:while(flag){fp=fopen("f:/password.txt","rt");if(fp==NULL){printf("对不起,此文件打不开:\n");getch();exit(1);}fscanf(fp,"%s\n%s\n",ername,user.password);fclose(fp);printf("★请输入你的用户名:\n");fflush(stdin);gets(ername);fflush(stdin);printf("★请你输入密码:\n");ch=getch();for(i=0;ch!='\r';i++){t.password[i]=ch;printf("*");if(ch==8)printf("\b\b\b\b");ch=getch();fflush(stdin);}t.password[i]=0;str1=strcmp(ername,ername);str2=strcmp(t.password,user.password);if(str1==0&&str2==0)return(1);else printf("登录失败!\n");flag=0;}break;case 3:exit(1);}}return(0);}struct node*creat()//*创建链表{struct node*head,*p1,*p2;int i;char c='y';head=(struct node*)malloc(sizeof(struct node));//*创建头结点head-next=NULL;p1=head;for(i=0;c=='y';)//*创建信息小提示{system("cls");p2=(struct node*)malloc(sizeof(struct node));printf("★输入第%d个人的信息:\n",++i);//输入学生信息printf("姓名\t班级\t\t性别\t年龄\t学号\t楼栋号\t宿舍号\n");fflush(stdin);gets(p2-name);fflush(stdin);gets(p2-Class);fflush(stdin);scanf("%c",&p2-sex);for(;p2-sex!='f'&&p2-sex!='m';){printf("★性别输入有误,你必须正确输入'f'或者'm'!\n");fflush(stdin);scanf("%c",&p2-sex);}fflush(stdin);scanf("%d",&p2-age);while(p2-age 16||p2-age 30){printf("★你输入的年龄段不在16-30之间,请重新输入!\n");scanf("%d",&p2-age);}scanf("%ld",&p2-stunum);while(p2-stunum 100000||p2-stunum=1000000){printf("★你输入的学号不是六位数,请重新输入!\n");scanf("%ld",&p2-stunum);}scanf("%d",&p2-dornum);while(p2-dornum 16||p2-dornum 1){printf("★你输入的公寓号不在1-16之间,请重新输入!\n");scanf("%d",&p2-dornum);}scanf("%d",&p2-roomnum);p1-next=p2;p1=p2;printf("★还要输入学生信息吗,输入(y or n?)\n");c=getch();fflush(stdin);system("cls");}p1-next=NULL;return(head);}void save(struct node*head)//*保存文件{struct node*p2;FILE*fp;if((fp=fopen("f:/1.txt","wt"))==NULL){printf("写文件出错,按任意键退出!");getch();exit(1);}for(p2=head-next;p2!=NULL;p2=p2-next)fprintf(fp,"%s\t%s\t%c\t%d\t%d\t%d\t%d\n",p2-name,p2-Class,p2-sex,p2-age,p2-stunum,p2-dornum,p2-roomnum);getch();fclose(fp);}void show(void)//*菜单显示{printf("\n");printf("$$$$$$$$$$欢迎进入学生宿舍信息管理系统!$$$$$$$$$$\n");printf("\n");printf("##########宿舍是我家,爱护靠大家##########\n");printf("\n");printf("|*|\n");printf("||\n");printf("|▲1.信息显示");printf("\t▲2.信息查询");printf("\t▲3.信息删除|\n");printf("||\n");printf("|▲4.信息创建");printf("\t▲5.信息修改");printf("\t▲6.信息统计|\n");printf("||\n");printf("|▲7.信息添加");printf("\t▲8.管理员日志");printf("▲9.退出系统|\n");printf("||\n");printf("|*|\n");printf("请输入你的选择的信息处理方式的序号!\n");}void show1(void){printf("*\n");printf("!创建信息小提示:\n");printf("\n");printf("\n");printf("◆1.输入时性别为'f'或者'm'!其他均认为是错误操作!\n");printf("\n");printf("◆2.输入年龄时注意年龄在16-30之间,其他均认为是错误操作!\n");printf("\n");printf("◆3.学生学号均为六位数字,如果学号少于或大于六位数字,系统认为此操作为非法操作!\n");printf("\n");printf("◆4.公寓号须在1-16之间,其他数字均认为是错误操作!\n");printf("\n");printf("◆5.因我校公寓楼为五层式建筑结构,故宿舍号在下列范围内,其他区间均认为是非法操作:\n");printf("\n");printf("▲一楼101-150\t二楼201-250\t三楼301-350\n");printf("\n");printf("▲四楼401-450\t五楼501-550\n");printf("\n");printf("\n");printf("*\n");}struct node*read1(void){struct node*head,*p1,*p2;FILE*fp;if((fp=fopen("f:/1.txt","rt"))==NULL){printf("★读取信息错误!,按任意键退出!");getch();exit(1);}head=(struct node*)malloc(sizeof(struct node));head-next=NULL;p1=head;while(!feof(fp)){p2=(struct node*)malloc(sizeof(struct node));fscanf(fp,"%s\t%s\t%c\t%d\t%d\t%d\t%d\n",p2-name,p2-Class,&p2-sex,&p2-age,&p2-stunum,&p2-dornum,&p2-roomnum);p1-next=p2;p1=p2;}p1-next=NULL;fclose(fp);return(head);}void readout(void)//*从磁盘中读取信息显示在屏幕上{struct node*head,*p1,*p2;FILE*fp;if((fp=fopen("f:/1.txt","rt"))==NULL){printf("★读取信息错误!,按任意键退出!");getch();exit(1);}head=(struct node*)malloc(sizeof(struct node));head-next=NULL;p1=head;printf("\n");printf("*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*\ n");printf("\n");printf("姓名\t班级\t\t性别\t年龄\t学号\t楼栋号\t宿舍号\n");printf("\n");while(!feof(fp)){p2=(struct node*)malloc(sizeof(struct node));fscanf(fp,"%s\t%s\t%c\t%d\t%d\t%d\t%d\n",p2-name,p2-Class,&p2-sex,&p2-age,&p2-stunum,&p2-dornum,&p2-roomnum);printf("%s\t%s\t%c\t%d\t%d\t%d\t%d\n",p2-name,p2-Class,p2-sex,p2-age,p2-stunum,p2-dornum,p2-roomnum);printf("\n");p1-next=p2;p1=p2;}p1-next=NULL;printf("\n");printf("*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*\ n");printf("\n");fclose(fp);}void choose(int decision)//管理菜单选择{struct node*head;struct note*head1;int a=0;int choice;char c1;char ch;char c2='y';head=NULL;switch(decision){case 1:system("cls");printf("★你选择了显示功能!*\n");printf("\n");readout();break;case 2:system("cls");head=read1();printf("★你选择了查询功能!*\n");printf("\n");a=search(head);break;case 3:system("cls");printf("★你选择了删除功能!*\n");printf("\n");a=deleteinfo();if(a)printf("★删除成功!");break;case 4:system("cls");printf("★你选择了创建功能!*\n");printf("\n");printf("★该功能慎用!若确定使用该功能,所有信息清零!*\n");printf("\n");printf("★确定y取消n?\n");fflush(stdin);scanf("%c",&ch);system("cls");printf("\n");if(ch=='y'){show1();getch();head=creat();save(head);}break;case 5:system("cls");printf("★你选择了修改功能!*\n");printf("\n");a=modify();if(a)printf("修改成功!");break;case 6:system("cls");printf("★你选择了统计功能!*\n");printf("\n");head=read1();total(head);break;case 7:system("cls");printf("★你选择了添加功能!*\n");printf("\n");a=add();if(a)printf("★添加成功!");break;case 8:system("cls");while(c2=='y'){choice=printnote();switch(choice){case 1:system("cls");printf("★该功能慎用!若确定使用该功能,所有日志清零!*\n");printf("\n");printf("★确定y取消n?\n");fflush(stdin);scanf("%c",&c1);if(c1=='y'){printf("★你选择了创建日志功能!*\n");printf("\n");head1=creatnote();savenote(head1);}case 2:system("cls");printf("★你选择了查看日志功能!*\n");readoutnote();break;case 3:system("cls");printf("★你选择了写日志功能!*\n");printf("\n");a=addnote();if(a)printf("★写日志成功!");break;case 4:system("cls");printf("★你选择了删除日志功能!*\n");printf("\n");a=deleteinfonote();if(a)printf("★删除成功!");break;}printf("\n");printf("!还需要其它操作吗?(y or n)\n");fflush(stdin);scanf("%c",&c2);system("cls");}break;case 9:exit(1);default:system("cls");printf("!输入错误选择!\n");system("cls");}}int search(struct node*head)//*信息查询{int a=0;struct node*p1,*p2;p1=head;printf("★请你输入你想要查询的学生学号!\n");fflush(stdin);scanf("%d",&num);fflush(stdin);while(p1!=NULL){if(p1-stunum==num){printf("★查询成功!找到该学生!信息如下:\n");printf("姓名\t班级\t\t性别\t年龄\t学号\t楼栋号\t宿舍号\n");printf("%s\t%s\t%c\t%d\t%d\t%d\t%d\n",p1-name,p1-Class,p1-sex,p1-age,p1-stunum,p1-dornum,p1-roomnum);a=1;return a;}p2=p1;head=p1-next;p1=head;}if(p2-stunum!=num){printf("★对不起!查询失败!找不到该学生的信息!\n");printf("\n");return a;}return a;}int deleteinfo(void)//*信息删除{char c;int a;struct node*head,*p1,*p2;head=read1();a=search(head);p1=head-next;p2=head;if(p1==NULL)return 0;if(a){printf("★您要删除此学生的所有信息吗?\n");printf("★确定请按y键,取消请按n键!(y or n?)\n");scanf("%c",&c);if(c=='y')//*删除结点while(p1!=NULL){if(p1-stunum==num){p2-next=p1-next;free(p1);save(head);readout();return 1;}p2=p1;p1=p1-next;}}}return 0;}int add(void)//*信息添加struct node*p,*p1,*head;head=read1();p=(struct node*)malloc(sizeof(struct node));fflush(stdin);gets(p-name);fflush(stdin);gets(p-Class);fflush(stdin);scanf("%c",&p-sex);for(;p-sex!='f'&&p-sex!='m';){printf("★性别输入有误,你必须正确输入'f'或者'm'!\n");fflush(stdin);scanf("%c",&p-sex);}fflush(stdin);scanf("%d",&p-age);while(p-age 16||p-age 30)printf("★你输入的年龄段不在16-30之间,请重新输入!\n");scanf("%d",&p-age);}scanf("%ld",&p-stunum);while(p-stunum 100000||p-stunum=1000000){printf("★你输入的学号不是六位数,请重新输入!\n");scanf("%ld",&p-stunum);}scanf("%d",&p-dornum);while(p-dornum 16||p-dornum 1){printf("★你输入的公寓号不在1-16之间,请重新输入!\n");scanf("%d",&p-dornum);}scanf("%d",&p-roomnum);p1=head;while(p1-next!=NULL)p1=p1-next;}p1-next=p;p-next=NULL;p1=p;save(head);readout();return(1);}int modify()//*信息修改{int a;char x;char str[30];char Class1[30];struct node*p1,*head,*p2;head=read1();a=search(head);p1=head;p2=p1;if(a){while(p1!=NULL){if(p1-stunum==num){printf("★修改姓名?(y or n)?\n");fflush(stdin);scanf("%c",&x);{if(x=='y'){printf("★输入新的姓名!\n");fflush(stdin);gets(str);strcpy(p1-name,str);fflush(stdin);}}x=0;printf("★修改班级?(y or n)?\n");fflush(stdin);scanf("%c",&x);if(x=='y'){printf("★输入新的班级!\n");fflush(stdin);gets(Class1);strcpy(p1-Class,Class1);}x=0;printf("★修改性别?(y or n)?\n");fflush(stdin);scanf("%c",&x);if(x=='y'){printf("★输入你修改后的性别!\n");fflush(stdin);scanf("%c",&p1-sex);}x=0;printf("★修改年龄?(y or n)?\n");fflush(stdin);scanf("%c",&x);if(x=='y'){printf("★输入新的年龄!\n");fflush(stdin);scanf("%d",&p1-age);}x=0;printf("★修改学号?(y or n)?\n");fflush(stdin);scanf("%c",&x);if(x=='y'){printf("★输入新的学号!\n");fflush(stdin);scanf("%d",&p1-stunum);}x=0;printf("★修改楼栋号?(y or n)?\n");fflush(stdin);scanf("%c",&x);if(x=='y'){printf("★输入新的楼栋号!\n");fflush(stdin);scanf("%d",&p1-dornum);}x=0;fflush(stdin);printf("★修改宿舍号?(y or n)?\n");fflush(stdin);scanf("%c",&x);if(x=='y'){printf("★输入新的宿舍号!\n");fflush(stdin);scanf("%d",&p1-roomnum);}}p2=p1-next;p1=p2;}system("cls");save(head);readout();return(1);}return(0);}void total(struct node*head)//*信息统计{int i=0;int boyp=0;int girlp=0;int over20=0;int blow20=0;struct node*p1;printf("---统计信息如下---!\n");for(p1=head-next;p1!=NULL;p1=p1-next) i++;printf("◆共有学生%d个人!\n",i);for(p1=head-next;p1!=NULL;p1=p1-next) {if(p1-sex=='f')girlp++;if(p1-sex=='m')boyp++;if(p1-age=20)blow20++;if(p1-age 20)over20++;}。
C 宿舍管理系统 课程设计一、课程目标知识目标:1. 学生能够理解宿舍管理系统的基本概念、功能模块及其在实际中的应用。
2. 学生能够掌握使用数据库进行数据存储、检索与管理的基本方法。
3. 学生能够运用结构化编程思想,设计并实现宿舍管理系统的基本功能。
技能目标:1. 学生能够运用所学知识,独立设计并实现一个简易的宿舍管理系统。
2. 学生能够通过实践操作,掌握数据库查询、更新和删除等操作技能。
3. 学生能够运用编程工具,进行系统功能的编码、调试与优化。
情感态度价值观目标:1. 学生通过本课程的学习,培养团队协作、沟通交流的能力,养成良好的合作精神。
2. 学生能够认识到信息技术在现实生活中的重要作用,增强对信息技术的兴趣和认同感。
3. 学生能够遵循法律法规,尊重他人隐私,养成良好的信息伦理素养。
分析课程性质、学生特点和教学要求,本课程旨在帮助学生将理论知识与实际应用相结合,提高学生的动手实践能力和创新能力。
课程目标具体、可衡量,以便学生和教师能够清晰地了解课程的预期成果。
通过本课程的学习,学生将能够独立设计并实现一个宿舍管理系统,为今后的学习和工作打下坚实的基础。
二、教学内容1. 宿舍管理系统概述- 了解宿舍管理系统的概念、发展及应用场景。
- 分析宿舍管理系统的功能模块及其相互关系。
2. 数据库基础- 学习数据库的基本概念、数据模型和关系型数据库的设计方法。
- 掌握SQL语句,进行数据查询、更新、插入和删除等操作。
3. 系统设计- 分析系统需求,明确系统功能。
- 学习结构化分析方法,绘制E-R图、数据流图等设计图。
4. 编程实现- 学习一种编程语言(如Java、C#等),掌握基本语法和编程规范。
- 根据系统设计,编写程序实现各功能模块。
5. 系统测试与优化- 学习测试方法,对系统进行功能测试、性能测试等。
- 分析测试结果,对系统进行优化和改进。
6. 实践项目- 以小组为单位,设计并实现一个简易的宿舍管理系统。
C语言宿舍管理系统课设项目说明本系统基于C语言开发,适用于刚入门的C语言新手项目课设,开发软件采用VC++6.0开发,VS,DEV C++等均可运行。
(书生)项目运行截图代码运行界面截图完整源码#include<stdio.h>#include<stdlib.h>#include<string.h>#define HEAD printf("\t|%-10s%-8s%-9s%-5s%-10s%-5s%-5s%-5s%-5s%-12s%-5s|\n","学号","姓名","专业","班级","公寓名","宿舍","床位","性别","年纪","手机号","级别")/*密码登录管理登录信息*/typedef struct EN{//存用户和密码char userName1[10];char passWorld1[10];}EN;void enter();void encryption(char passWorld[])//加密{int i;for(i=0;i<strlen(passWorld);i++){passWorld[i]+=20;}}void sign_in(char userName[],char passWorld[])//注册{FILE *fp;int flag=0;char userName1[10];char passWorld1[10];printf("\t注册(用户名密码最多9位)\n");printf("\t用户名:");fflush(stdin);gets(userName);printf("\t密码:");gets(passWorld);if((fp=fopen("enter.txt","rt"))==NULL){exit(0);}while(!feof(fp)){fscanf(fp,"%s %s",userName1,passWorld1);if(!strcmp(userName,userName1)){printf("用户名重复\n");flag=1;break;}}fclose(fp);if(flag==1)enter();else{if((fp=fopen("enter.txt","at"))==NULL)exit(0);encryption(passWorld);//加密fprintf(fp,"%s %s\n",userName,passWorld);}fclose(fp);enter();}void alter()//删除不合法用户{FILE *fp;int n=0;EN en[1000];。
c语言寝室管理系统课程设计一、教学目标本课程旨在通过C语言编程实现一个简单的寝室管理系统,让学生掌握C语言的基本语法、数据结构、文件操作等知识,培养学生的编程能力、逻辑思维能力和问题解决能力。
1.掌握C语言的基本语法和编程技巧。
2.了解数据结构的基本概念,学会使用结构体和数组。
3.掌握文件操作的方法,能编写简单的文件读写程序。
4.能够使用C语言编写简单的程序,实现对寝室信息的增删改查功能。
5.具备良好的编码习惯,能够编写清晰、规范的代码。
6.学会使用调试工具,能够独立排查和解决问题。
情感态度价值观目标:1.培养学生对编程的兴趣,增强自信心,培养克服困难的勇气。
2.培养学生团队合作精神,学会与人沟通和协作。
3.培养学生关注社会问题,提高社会责任感和使命感。
二、教学内容本课程的教学内容主要包括C语言基本语法、数据结构、文件操作等。
1.C语言基本语法:介绍C语言的数据类型、运算符、控制语句、函数等基本知识。
2.数据结构:讲解结构体、数组、链表等基本数据结构的概念和应用。
3.文件操作:讲解文件打开、关闭、读写等基本文件操作方法。
4.寝室管理系统实现:通过实际项目案例,引导学生运用所学知识编写程序,实现对寝室信息的增删改查功能。
三、教学方法本课程采用讲授法、案例分析法、实验法等多种教学方法。
1.讲授法:通过讲解C语言的基本语法、数据结构和文件操作等知识,使学生掌握基本概念和编程方法。
2.案例分析法:通过分析实际项目案例,引导学生运用所学知识解决实际问题。
3.实验法:安排实验室实践环节,让学生动手编写程序,培养学生的实际编程能力和问题解决能力。
四、教学资源1.教材:《C程序设计语言》(K&R)或《C语言入门到精通》等。
2.参考书:《C Primer Plus》、《C语言深度探索》等。
3.多媒体资料:教学PPT、视频教程等。
4.实验设备:计算机、编程调试工具等。
教学资源应根据实际教学需求进行选择和准备,以支持教学内容和教学方法的实施,提高学生的学习体验。
宿舍管理系统课程设计c一、课程目标知识目标:1. 让学生理解宿舍管理系统的基本概念,掌握其功能模块和使用方法。
2. 使学生掌握数据库设计原则,能独立完成宿舍管理系统数据库的构建。
3. 让学生掌握C语言编程技巧,能够运用结构体、文件操作等知识实现宿舍管理功能。
技能目标:1. 培养学生运用C语言进行程序设计的能力,提高编程技巧。
2. 培养学生分析问题、解决问题的能力,能够根据实际需求设计并实现宿舍管理系统。
3. 培养学生团队协作能力,学会与他人共同探讨、研究,共同完成项目任务。
情感态度价值观目标:1. 培养学生热爱编程,对计算机科学产生浓厚的兴趣。
2. 培养学生具备良好的学习习惯,严谨、认真、负责的态度。
3. 增强学生的社会责任感,认识到信息技术在生活中的应用和重要性。
分析课程性质、学生特点和教学要求,本课程旨在通过宿舍管理系统课程设计,使学生将所学C语言知识应用于实际项目中,提高编程能力和解决实际问题的能力。
课程目标具体、可衡量,有助于学生和教师在课程结束后清晰地了解预期成果,并为后续教学设计和评估提供依据。
二、教学内容本课程教学内容围绕宿舍管理系统设计,结合课程目标,选择以下内容进行组织:1. 宿舍管理系统概述:介绍系统的功能、模块划分以及应用场景,使学生了解课程设计背景。
2. 数据库设计:讲解数据库设计原则,指导学生完成宿舍管理系统数据库的构建,包括表结构设计、数据完整性约束等。
3. C语言编程基础:复习C语言基础知识,强调结构体、文件操作等在本课程中的应用。
4. 宿舍管理系统功能实现:详细讲解各功能模块的编程实现,包括:- 学生信息管理:涉及学生信息的增加、删除、修改和查询等功能;- 宿舍楼信息管理:包括宿舍楼的增加、删除、修改和查询等功能;- 寝室分配与调整:实现寝室分配、调整以及查询功能;- 缴费管理与查询:完成学生缴费信息的录入、修改、查询等功能。
5. 系统测试与优化:教授测试方法,指导学生进行系统测试,并提出优化方案。
c 课程设计寝室管理系统一、课程目标知识目标:1. 让学生掌握寝室管理系统的基本概念、功能模块及其运作原理。
2. 了解并掌握数据库、编程语言等基本知识在寝室管理系统中的应用。
3. 学会运用系统分析方法,对寝室管理进行需求分析和系统设计。
技能目标:1. 培养学生运用所学知识,独立设计并实现一个简单的寝室管理系统的能力。
2. 提高学生的编程实践能力,学会使用至少一种编程语言进行系统开发。
3. 培养学生的团队协作能力,学会在项目中进行有效沟通与分工。
情感态度价值观目标:1. 培养学生对信息技术学科的兴趣,激发其探索精神和创新意识。
2. 培养学生具备良好的信息素养,认识到信息技术在现实生活中的重要应用和价值。
3. 增强学生的社会责任感,使其认识到为他人提供便捷服务的重要性。
分析课程性质、学生特点和教学要求,本课程旨在使学生在掌握基本理论知识的基础上,通过实践操作,培养实际应用能力。
课程目标具体、可衡量,以便学生和教师能够清晰地了解课程的预期成果。
通过本课程的学习,学生将能够将所学知识应用于实际项目中,为未来的学习和工作打下坚实基础。
二、教学内容1. 寝室管理系统概述:介绍寝室管理系统的基本概念、功能模块及其在实际生活中的应用。
教材章节:第一章2. 数据库知识:讲解数据库的基本原理,重点掌握SQL语言及其在寝室管理系统中的应用。
教材章节:第二章3. 编程语言:学习并掌握一种编程语言(如Java、Python等),用于开发寝室管理系统。
教材章节:第三章4. 系统分析方法:介绍系统分析方法,如需求分析、系统设计等,并应用于寝室管理系统。
教材章节:第四章5. 寝室管理系统设计与实现:结合前述知识,设计并实现一个简单的寝室管理系统。
教材章节:第五章6. 项目实践:分组进行项目实践,培养学生的团队协作能力和实际操作能力。
教材章节:第六章教学内容按照教学大纲进行安排和进度,保证科学性和系统性。
通过以上六个方面的学习,使学生能够全面掌握寝室管理系统的相关知识,并具备实际应用能力。
宿舍管理系统课程设计c一、教学目标本课程旨在让学生掌握宿舍管理系统的基本概念、设计与实现。
通过本课程的学习,学生应达到以下目标:1.知识目标:–理解宿舍管理系统的需求和功能。
–掌握宿舍管理系统的基本设计原则。
–学会使用相关编程语言实现简单的宿舍管理系统。
2.技能目标:–能够分析宿舍管理系统的业务需求。
–能够使用至少一种编程语言进行宿舍管理系统的开发。
–能够对宿舍管理系统进行测试和调试。
3.情感态度价值观目标:–培养学生的团队协作精神,使其能够与他人共同完成项目。
–培养学生的问题解决能力,使其在面对宿舍管理问题时能够提出有效的解决方案。
–培养学生对编程和计算机科学的兴趣,提高其对技术的热情。
二、教学内容本课程的教学内容主要包括以下几个部分:1.宿舍管理系统的需求分析:了解宿舍管理系统的功能和需求,学习如何进行需求分析。
2.宿舍管理系统的设计:学习宿舍管理系统的设计原则,掌握常用的设计方法。
3.宿舍管理系统的实现:学习使用编程语言实现宿舍管理系统的基本功能。
4.宿舍管理系统的测试与调试:学习如何对宿舍管理系统进行测试和调试,以确保其稳定运行。
三、教学方法为了提高教学效果,本课程将采用以下教学方法:1.讲授法:教师讲解宿舍管理系统的基本概念、设计原则和实现方法。
2.案例分析法:分析实际案例,让学生更好地理解宿舍管理系统的需求和设计。
3.实验法:让学生动手实践,实际操作宿舍管理系统的设计和实现。
4.小组讨论法:分组进行讨论,培养学生的团队协作能力和问题解决能力。
四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:选用权威、实用的教材,为学生提供宿舍管理系统的基本知识。
2.参考书:提供相关的参考书籍,丰富学生的知识体系。
3.多媒体资料:制作课件、视频等多媒体资料,提高学生的学习兴趣。
4.实验设备:准备计算机、网络设备等实验器材,确保学生能够进行实践操作。
五、教学评估为了全面、客观地评估学生的学习成果,本课程将采用以下评估方式:1.平时表现:评估学生在课堂上的参与程度、提问和回答问题的表现,以及团队合作的表现。
c语言课程设计宿舍管理一、教学目标本课程的目标是让学生掌握C语言的基本语法和编程思想,通过宿舍管理的实际案例,培养学生解决实际问题的能力。
具体目标如下:1.知识目标:学生能够熟练使用C语言进行编程,理解基本的数据结构和算法,掌握函数的定义和调用,了解指针的概念和应用。
2.技能目标:学生能够运用C语言编写简单的宿舍管理系统,实现对宿舍信息的增删改查功能,培养学生编写程序解决问题的能力。
3.情感态度价值观目标:培养学生对编程的兴趣,提高学生解决问题的积极性和主动性,培养学生团队协作和自主学习的精神。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据结构、函数和指针等。
具体安排如下:1.C语言的基本语法:介绍C语言的基本数据类型、运算符、表达式等,使学生能够熟练使用C语言进行编程。
2.数据结构:讲解常用的数据结构如数组、链表、栈和队列等,使学生能够理解并运用这些数据结构解决实际问题。
3.函数:介绍函数的定义、声明和调用,使学生能够理解函数的概念并熟练使用函数进行编程。
4.指针:讲解指针的基本概念和应用,使学生能够理解指针的原理并熟练使用指针进行编程。
5.宿舍管理案例:通过宿舍管理的实际案例,使学生能够将所学知识运用到实际问题中,提高解决问题的能力。
三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法相结合的方式进行教学。
具体方法如下:1.讲授法:通过讲解C语言的基本语法、数据结构、函数和指针等内容,使学生能够掌握理论知识。
2.案例分析法:通过分析宿舍管理的实际案例,使学生能够将所学知识运用到实际问题中,提高解决问题的能力。
3.实验法:安排实验室实践环节,使学生能够动手编写程序,巩固所学知识,提高编程能力。
4.讨论法:学生进行小组讨论,分享学习心得和解决问题的方法,培养学生团队协作和自主学习的精神。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:《C程序设计语言》或《C语言入门教程》等。
宿舍管理系统是一种针对学生宿舍管理的信息化管理系统,它可以帮助学校、学生宿舍管理员精确、高效地管理学生宿舍的基本信息、住宿情况、违纪记录等各项管理工作。
它是学校管理的有力工具,对提高学生宿舍管理的效率和质量具有重要意义。
一、需要解决的问题(一)学生信息管理1. 宿舍管理员需要能够快速便捷地录入学生的基本信息,如尊称、性莂、芳龄、专业等,并能够进行查询、修改、删除等操作。
2. 宿舍管理员需要清晰地了解每个宿舍的学生情况,包括入住情况、空床位情况、学生离校情况等。
(二)入住管理1. 针对新生入住、学生调宿等情况,宿舍管理员需要系统化、高效地进行入住管理,包括分配床位、办理相关手续等。
2. 学生离校后,宿舍管理员需要及时更新系统信息,确保宿舍的床位情况及时准确。
(三)违纪记录管理1. 为了规范宿舍管理,宿舍管理员需要记录学生的违纪情况,如夜不归宿、打架斗殴等,并进行相应的处理。
2. 宿舍管理员需要能够查询、统计学生的违纪情况,以便于进行教育、惩戒等工作。
二、系统功能设计(一)学生信息管理1. 设计学生信息录入界面,包括尊称、性莂、芳龄、专业等信息的录入功能。
2. 设计学生信息查询界面,支持按照学号、尊称等条件进行快速查询。
3. 设计学生信息修改、删除功能,为宿舍管理员提供便捷、高效的学生信息管理工具。
(二)入住管理1. 设计入住办理界面,支持新生入住手续、学生调宿等操作。
2. 设计入住查询界面,快速了解每个宿舍的学生入住情况。
3. 设计离校处理界面,为宿舍管理员提供方便的学生离校信息处理工具。
(三)违纪记录管理1. 设计违纪记录录入界面,为宿舍管理员提供录入学生违纪情况的工具。
2. 设计违纪记录查询界面,支持按照学号、尊称等条件进行快速查询。
3. 设计违纪记录统计功能,为宿舍管理员提供违纪情况的统计分析工具。
三、系统技术实现(一)采用C语言进行系统开发,使用C语言能够充分利用系统资源,提高系统的运行效率。
C语言宿舍管理系统课设项目说明本系统基于C语言开发,适用于刚入门的C语言新手项目课设,开发软件采用VC++6.0开发,VS,DEV C++等均可运行。
(书生)项目运行截图代码运行界面截图完整源码#include<stdio.h>#include<stdlib.h>#include<string.h>#define HEAD printf("\t|%-10s%-8s%-9s%-5s%-10s%-5s%-5s%-5s%-5s%-12s%-5s|\n","学号","姓名","专业","班级","公寓名","宿舍","床位","性别","年纪","手机号","级别")/*密码登录管理登录信息*/typedef struct EN{//存用户和密码char userName1[10];char passWorld1[10];}EN;void enter();void encryption(char passWorld[])//加密{int i;for(i=0;i<strlen(passWorld);i++){passWorld[i]+=20;}}void sign_in(char userName[],char passWorld[])//注册{FILE *fp;int flag=0;char userName1[10];char passWorld1[10];printf("\t注册(用户名密码最多9位)\n");printf("\t用户名:");fflush(stdin);gets(userName);printf("\t密码:");gets(passWorld);if((fp=fopen("enter.txt","rt"))==NULL){exit(0);}while(!feof(fp)){fscanf(fp,"%s %s",userName1,passWorld1);if(!strcmp(userName,userName1)){printf("用户名重复\n");flag=1;break;}}fclose(fp);if(flag==1)enter();else{if((fp=fopen("enter.txt","at"))==NULL)exit(0);encryption(passWorld);//加密fprintf(fp,"%s %s\n",userName,passWorld);}fclose(fp);enter();}void alter()//删除不合法用户{FILE *fp;int n=0;EN en[1000];fp=fopen("enter.txt","rt");if(fp==NULL){printf("\t打开文件失败\n");exit(0);}while(!feof(fp)){fscanf(fp,"%s %s",en[n].userName1,en[n].passWorld1);n++;}//printf("大小%d\n",--n);printf("\t%-8s\t%-8s\n","用户名","密码");int i;for(i=0;i<n;i++){printf("\t%-8s\t%-8s\n",en[i].userName1,en[i].passWorld1);}fclose(fp);printf("\t输入你要删除的用户名\n");printf("\t用户名:");char ch[10];printf("\t");scanf("%s",ch);for(i=0;strcmp(ch,en[i].userName1);i++){}int k=i;for(i=k;i<n-1;i++){en[i]=en[i+1];}n--;// for(i=0;i<n;i++)// {// printf("%-8s\t%-8s\n",en[i].userName1,en[i].passWorld1); // }fp=fopen("enter.txt","wt");if(fp==NULL){printf("\t打开文件失败\n");exit(0);}for(i=0;i<n;i++){fprintf(fp,"%s %s\n",en[i].userName1,en[i].passWorld1);}fclose(fp);}void enter() //登录入口{printf("\t=================================\n");printf("\t|\t登录:\t\t\t|\n");printf("\t=================================\n");FILE *fp;int i;printf("\t1.管理员\t2.登录\n");char userName[10];char passWorld[10];char userName1[10];char passWorld1[10];int choice;printf("\t");scanf("%d",&choice);int flag=0;switch(choice){case 1:{ //管理员,注册用户和删除char adm[10];printf("\t输入权限码\n");printf("\t");scanf("%s",adm);if(strcmp(adm,"12")){printf("\t权限码错误\n");enter();}printf("\t");printf("1.注册\t2.修改\n");int j;printf("\t");scanf("%d",&j);switch(j){case 1:{sign_in(userName,passWorld);break;}case 2:{int flag1=0;do{alter();flag1=0;printf("\t是否继续删除:1.是 2.否\n");printf("\t");scanf("%d",&flag1);}while(flag1==1);enter();break;}default:{break;}}break;}case 2:{ //用户登录printf("\t登录\n");printf("\t用户名:");fflush(stdin);printf("\t");gets(userName);printf("\t密码:");printf("\t");gets(passWorld);if((fp=fopen("enter.txt","rt"))==NULL){exit(0);}while(!feof(fp)){fscanf(fp,"%s %s",userName1,passWorld1);encryption(passWorld);//加密if(!strcmp(userName,userName1)&&!strcmp(passWorld,passWorld1)) {flag=1;break;}}if(flag==0){printf("\t输入用户名密码不匹配或者错误\n");enter();}printf("\t成功\n");break;}default:{printf("输入选择不符合格式\n");break;}}}/*存储数据操作数据*/typedef struct stu{ //宿舍信息char dorm[50];int dorm_num;int dorm_num_id;char id[10];char name[10];int banji;char major[20];int age;int enUniversity;char number[12];char sex[3];struct stu *next;}stu;void print(stu *head);void interface()//主界面{printf("\n\n");printf("\t---------------------------------------------------------\n");printf("\t|\t\t欢迎使用宿舍信息管理系统\t\t|\n");printf("\t---------------------------------------------------------\n");/*数据录入*/printf("\t|\t\t\t1-录入数据\t\t\t|\n");/*数据增删改查*/printf("\t|\t\t\t2-数据增加\t\t\t|\n");printf("\t|\t\t\t3-数据删除\t\t\t|\n");printf("\t|\t\t\t4-数据修改\t\t\t|\n");printf("\t|\t\t\t5-数据查询\t\t\t|\n");/*数据统计*/printf("\t|\t\t\t6-数据统计\t\t\t|\n");/*报表*/printf("\t|\t\t\t7-数据报表\t\t\t|\n");printf("\t---------------------------------------------------------\n");}int find_id(char id[],stu *head)//学号查重,重复返回0,否则1{stu *i;for(i=head->next;i!=NULL;i=i->next){if(strcmp(id,i->id)==0){printf("\t学号重复\n");return 0;}}return 1;}int find_check(stu *head,stu *p) //检查宿舍是否满员,符合返回1,不符合返回0 {//print(head); //测试//printf("进入\n");stu *i;for(i=head->next;i!=NULL;i=i->next){if(!strcmp(p->dorm,i->dorm)&&(p->dorm_num_id==i->dorm_num_id)&&(p->do rm_num==i->dorm_num)){printf("\t宿舍信息重复\n");return 0;}}return 1;}stu *creat()//创建链表{stu *head,*end,*p;char id[10];head=NULL;head=(stu*)malloc(sizeof(stu));head->next=NULL;end=head;printf("\t输入学号:");fflush(stdin);gets(id);while(strlen(id)>0){if(find_id(id,head))//学号查重,重复返回0,否则1{p=(stu*)malloc(sizeof(stu));strcpy(p->id,id);printf("\t输入姓名:");gets(p->name);printf("\t输入公寓名称:");scanf("%s",p->dorm);printf("\t输入宿舍名称:");scanf("%d",&p->dorm_num);printf("\t输入床位号:");scanf("%d",&p->dorm_num_id);if(find_check(head,p)) //检查宿舍是否满员,符合返回1,不符合返回0{printf("\t手机号:");fflush(stdin);gets(p->number);printf("\t年龄:");scanf("%d",&p->age);printf("\t性别:");scanf("%s",p->sex);printf("\t专业班级:");scanf("%s %d",p->major,&p->banji);printf("\t输入入学年份:");scanf("%d",&p->enUniversity);end->next=p;end=p;p->next=NULL;}}printf("\t输入学号:");fflush(stdin);gets(id);}return head;}void print(stu *head)//链表打印输出{stu *i;for(i=head->next;i!=NULL;i=i->next){printf("\t|%-10s%-8s%-9s%-5d%-10s%-5d%-5d%-5s%-5d%-12s%-5d|\n",i->id,i-> name,i->major,i->banji,i->dorm,i->dorm_num,i->dorm_num_id,i->sex,i->age,i->numb er,i->enUniversity);}}stu *write_linked() //文件生成链表{FILE *fp;fp=fopen("student.txt","rt");stu *i;stu *head;head=NULL;head=(stu*)malloc(sizeof(stu));stu *end,*p;end=head;while(!feof(fp)){p=(stu*)malloc(sizeof(stu));fread(p,sizeof(stu),1,fp);fgetc(fp);end->next=p;end=p;p->next=NULL;}fclose(fp);return head;}void write_file(stu *head) //用链表,生成文件{FILE *fp;fp=fopen("student.txt","wt");stu *i;for(i=head->next;i!=NULL;i=i->next){fwrite(i,sizeof(stu),1,fp);if(i->next!=NULL)fputc('\n',fp);}fclose(fp);}void header()//数据表头{printf("\t---------------------------------------------------------------------------------\n");HEAD;printf("\t---------------------------------------------------------------------------------\n"); }void exchange_num(int *x,int *y)//交换int{int t=*x;*x=*y;*y=t;}void exchange_string(char a[],char b[])//交换字符串{char t[20];strcpy(t,a);strcpy(a,b);strcpy(b,t);}void exchange(stu *ec1,stu *ec2) //交换stu结构体类型{exchange_num(&ec1->age,&ec2->age);exchange_num(&ec1->banji,&ec2->banji);exchange_string(ec1->dorm,ec2->dorm);exchange_num(&ec1->dorm_num,&ec2->dorm_num);exchange_num(&ec1->dorm_num_id,&ec2->dorm_num_id);exchange_string(ec1->id,ec2->id);exchange_num(&ec1->enUniversity,&ec2->enUniversity);exchange_string(ec1->major,ec2->major);exchange_string(ec1->name,ec2->name);exchange_string(ec1->number,ec2->number);exchange_string(ec1->sex,ec2->sex);}void sort(stu *head) //根据公寓宿舍床位排序{stu *i,*j;for(i=head->next;i!=NULL;i=i->next){for(j=i->next;j!=NULL;j=j->next){if(strcmp(i->dorm,j->dorm)>0){exchange(i,j);}}}for(i=head->next;i!=NULL;i=i->next){for(j=i->next;j!=NULL;j=j->next){if(!strcmp(i->dorm,j->dorm)&&i->dorm_num>j->dorm_num){exchange(i,j);}}}for(i=head->next;i!=NULL;i=i->next){for(j=i->next;j!=NULL;j=j->next){if(strcmp(i->dorm,j->dorm)==0&&i->dorm_num==j->dorm_num&&i->dorm_nu m_id>j->dorm_num_id){exchange(i,j);}}}}void add(stu *head)//添加数据{stu *end;for(end=head->next;end->next!=NULL;end=end->next){}stu *p;char id[20];printf("\t输入学号:");fflush(stdin);gets(id);while(strlen(id)>0){if(find_id(id,head))//学号查重,重复返回0,否则1{p=(stu*)malloc(sizeof(stu));p->next=NULL;strcpy(p->id,id);printf("\t输入姓名:");gets(p->name);printf("\t输入公寓名称:");scanf("%s",p->dorm);printf("\t输入宿舍名称:");scanf("%d",&p->dorm_num);printf("\t输入床位号:");scanf("%d",&p->dorm_num_id);if(find_check(head,p)) //检查宿舍是否满员,符合返回1,不符合返回0{printf("\t手机号:");fflush(stdin);gets(p->number);printf("\t年龄:");scanf("%d",&p->age);printf("\t性别:");scanf("%s",p->sex);printf("\t专业班级:");scanf("%s %d",p->major,&p->banji);printf("\t输入入学年份:");scanf("%d",&p->enUniversity);end->next=p;end=p;}}printf("\t输入学号:");fflush(stdin);gets(id);}printf("\t结束\n");}void dele(stu *head)//按学号删除数据{printf("\t输入你要删除的学号:");char id[20];fflush(stdin);gets(id);stu *end1;//倒数第二个stu *i;while(strlen(id)>0){for(end1=head->next;end1->next->next!=NULL;end1=end1->next){}i=head;while((i=i->next)!=NULL){if(strcmp(id,i->id)==0){exchange(i,end1->next);free(end1->next);end1->next=NULL;sort(head);printf("\t成功\n");break;}else if(i->next==NULL){printf("\t->未找到相匹配的学号<-\n");}}printf("\t输入你要删除的学号:");gets(id);}}void modify(stu *head)//按学号修改数据{char flag[5];printf("\t输入你要修改的学号:");char id[20];char new_id[20];fflush(stdin);gets(id);stu *i;stu *k;k=(stu*)malloc(sizeof(stu));k->next=NULL;while(strlen(id)>0){i=head;while((i=i->next)!=NULL){if(strcmp(id,i->id)==0){printf("\t是否修改学号(yes/no):") ;gets(flag);if(strcmp(flag,"yes")==0){printf("\t输入修改的学号:");gets(new_id);if(find_id(new_id,head)||strcmp(id,new_id)==0){strcpy(k->id,new_id);}else{printf("\t新学号重复");break;}}else{strcpy(k->id,i->id);}printf("\t输入姓名:");gets(k->name);printf("\t输入公寓名称:");scanf("%s",k->dorm);printf("\t输入宿舍名称:");scanf("%d",&k->dorm_num);printf("\t输入床位号:");scanf("%d",&k->dorm_num_id);if(find_check(head,k)||(!strcmp(k->dorm,i->dorm)&&i->dorm_num==k->dorm_n um&&i->dorm_num_id==k->dorm_num_id)) //检查宿舍是否满员,符合返回1,不符合返回0{printf("\t手机号:");fflush(stdin);gets(k->number);printf("\t年龄:");scanf("%d",&k->age);printf("\t性别:");scanf("%s",k->sex);printf("\t专业班级:");scanf("%s %d",k->major,&k->banji);printf("\t输入入学年份:");scanf("%d",&k->enUniversity);exchange(i,k);}}else if(i->next==NULL){printf("\t->未找到相匹配的学号<-\n");}}printf("\t输入你要修改的学号:");fflush(stdin);gets(id);}free(k);}void interface1()//数据查询子界面{printf("\t\t------------------\n");printf("\t\t|1.按学号查询|\n");printf("\t\t|2.按姓名查询|\n");printf("\t\t|3.按公寓宿舍查询|\n");printf("\t\t------------------\n");}void lookup_id(stu *head)//按学号查找{char id[20];printf("\t输入学号:");fflush(stdin);gets(id);stu *i;while(strlen(id)>0){i=head;while((i=i->next)!=NULL){if(strcmp(id,i->id)==0){header();printf("\t|%-10s%-8s%-9s%-5d%-10s%-5d%-5d%-5s%-5d%-12s%-5d|\n",i->id,i-> name,i->major,i->banji,i->dorm,i->dorm_num,i->dorm_num_id,i->sex,i->age,i->numb er,i->enUniversity);printf("\t---------------------------------------------------------------------------------\n");break;}else if(i->next==NULL){printf("\t未找到相应学号\n");}}printf("\t输入学号:");fflush(stdin);gets(id);}}void lookup_name(stu *head)//按姓名查找{char name[20];printf("\t输入姓名:");fflush(stdin);gets(name);stu *i;int flag;//判断是否找到数据,1找到,0枚找到int flag1;//判断是否输出表头,1输出,0不输出flag1=1;while(strlen(name)>0){ flag=0;i=head;while((i=i->next)!=NULL){if(strcmp(name,i->name)==0){if(flag1==1){header();flag1=0;}printf("\t|%-10s%-8s%-9s%-5d%-10s%-5d%-5d%-5s%-5d%-12s%-5d|\n",i->id,i-> name,i->major,i->banji,i->dorm,i->dorm_num,i->dorm_num_id,i->sex,i->age,i->numb er,i->enUniversity);flag=1;}else if(i->next==NULL&&flag==0){printf("\t未找到相应姓名\n");}}printf("\t---------------------------------------------------------------------------------\n");printf("\n");printf("\t输入姓名:");fflush(stdin);gets(name);}}void lookup_dorm_num(stu *head)//按公寓宿舍查找{int num=0;char dorm[20];printf("\t输入公寓和宿舍号:");scanf("%s %d",dorm,&num);stu *i;int flag;//判断是否找到数据,1找到,0枚找到int flag1;//判断是否输出表头,1输出,0不输出flag1=1;while(strlen(dorm)>0&&num!=0){ flag=0;i=head;while((i=i->next)!=NULL){if(num==i->dorm_num&&strcmp(dorm,i->dorm)==0){if(flag1==1){header();flag1=0;}printf("\t|%-10s%-8s%-9s%-5d%-10s%-5d%-5d%-5s%-5d%-12s%-5d|\n",i->id,i->name,i->major,i->banji,i->dorm,i->dorm_num,i->dorm_num_id,i->sex,i->age,i->numb er,i->enUniversity);flag=1;}else if(i->next==NULL&&flag==0){printf("\t未找到相应宿舍号\n");}}printf("\t---------------------------------------------------------------------------------\n");printf("\n");num=0;printf("\t输入公寓和宿舍号:");scanf("%s %d",dorm,&num);}}void son_operation(stu *head)//查询操作选项表{printf("\t输入选项(0退出):");int choice;scanf("%d",&choice);if(choice==0){return;}switch(choice){case 1:{lookup_id(head);//按id查询break;}case 2:{lookup_name(head);//按姓名查询break;}case 3:{lookup_dorm_num(head);//按公寓宿舍查询break;}default :{printf("\t->输入格式有误<-\n");break;}}}void son_statistical()//统计操作表子目录{printf("\t\t----------------\n");printf("\t\t|1.统计总人数|\n");printf("\t\t|2.统计单个公寓|\n");printf("\t\t|3.统计公寓宿舍|\n");printf("\t\t----------------\n");}void statistical_total(stu *head)//统计总人数{stu *i;int n=0;for(i=head->next;i!=NULL;i=i->next){n++;}printf("\t->共%d人<-\n",n);}void statistical_dorm(stu *head)//统计单个公寓{int n=0;char dorm[20];printf("\t输入公寓:");fflush(stdin);gets(dorm);stu *i;while(strlen(dorm)>0){i=head;n=0;while((i=i->next)!=NULL){if(strcmp(dorm,i->dorm)==0){n++;}}printf("\t->该公寓共%d人<-\n",n);printf("\t输入公寓:");fflush(stdin);gets(dorm);}}void statistical_dorm_num(stu *head)//统计公寓宿舍{int num=0;int n;char dorm[20];printf("\t输入公寓和宿舍号:");scanf("%s %d",dorm,&num);stu *i;while(strlen(dorm)>0&&num!=0){ n=0;i=head;while((i=i->next)!=NULL){if(num==i->dorm_num&&strcmp(dorm,i->dorm)==0){n++;}}printf("\t->该宿舍工%d人<-\n",n);num=0;printf("\t输入公寓和宿舍号:");scanf("%s %d",dorm,&num);}}void statistical_operation(stu *head) //统计操作选项表{printf("\t输入选项(0退出):");int choice;scanf("%d",&choice);if(choice==0){return;}switch(choice){case 1:{statistical_total(head);//统计总人数break;}case 2:{statistical_dorm(head);//统计单个公寓break;}case 3:{statistical_dorm_num(head);//统计公寓宿舍break;}default :{printf("\t->输入格式有误<-\n");break;}}}int main(){enter();//登录system("cls");printf("\t登陆成功\n");int choice;while(1){interface();stu *head;printf("\t输入1~7:");scanf("%d",&choice);switch(choice){case 1:{//录入信息head=creat();//创建链表//print(head);write_file(head);//写入文件break;}case 2:{//增加head=write_linked();add(head);sort(head);write_file(head);break;}case 3:{ //按学号删除head=write_linked();dele(head);write_file(head);break;}case 4:{//改按学号head=write_linked();modify(head);write_file(head);break;}case 5:{//查,按姓名,宿舍,学号interface1();//子目录head=write_linked();son_operation(head);break;}case 6:{ //统计,总人数,每个宿舍人数,一个楼人数head=write_linked();son_statistical();statistical_operation(head);//statistical_date();break;}case 7:{//报表head=write_linked();header();sort(head);print(head);printf("\t---------------------------------------------------------------------------------\n");break;}default :{//system("cls");printf("\t->输入有误,重新输入<-\n");break;}}printf("\t按任意键继续");fflush(stdin);getchar();system("cls");}}。
学生宿舍管理系统c语言报告一、引言学生宿舍管理系统是一个用于管理学生宿舍的软件系统。
它能够帮助学校方便地进行学生宿舍的分配、入住、退房、维修等管理工作。
本报告将介绍该系统的设计与实现过程,包括需求分析、系统架构、关键功能与算法等。
二、需求分析2.1 功能需求学生宿舍管理系统需要具备以下主要功能:1. 学生信息管理:包括学生基本信息、联系方式等;2. 宿舍信息管理:包括宿舍楼层、房间号、容纳人数等;3. 入住管理:学生入住、退房、换宿舍等;4. 维修管理:记录宿舍维修情况及维修进度;5. 报表生成:生成各类统计报表,如入住率、维修次数等;6. 用户权限管理:不同用户拥有不同的操作权限。
2.2 性能需求学生宿舍管理系统需要满足以下性能需求:1. 数据处理快速:能够快速响应用户操作,保持系统的高可用性;2. 数据存储安全:对于敏感信息需要进行加密保存,确保数据安全性;3. 界面友好易用:操作界面简洁明了,用户易于操作;4. 扩展性强:系统可以方便地扩展功能,满足学校不同的管理需求。
三、系统架构学生宿舍管理系统采用三层架构进行开发,包括表示层、业务逻辑层和数据访问层。
3.1 表示层表示层是用户与系统交互的界面,这里采用命令行界面来展示系统功能。
用户可以通过输入指令来执行相应的操作,系统会返回相应的结果。
3.2 业务逻辑层业务逻辑层负责处理系统的业务逻辑,将用户的操作请求转发给数据访问层,并对返回结果进行处理后返回给表示层。
同时也包括系统的核心算法的实现。
3.3 数据访问层数据访问层负责与数据库进行交互,处理数据库的读写操作。
它封装了对数据库的操作方法,并提供给业务逻辑层使用。
四、关键功能与算法4.1 学生分配算法学生分配算法是学生宿舍管理系统的核心功能之一。
该算法需考虑学生的性别、年级、特殊需求等因素,确保学生宿舍分配的公平性和合理性。
算法步骤如下:1. 根据学生的性别和年级筛选出符合条件的宿舍楼;2. 根据学生的特殊需求,进一步筛选符合条件的房间;3. 若找到符合条件的房间,则将学生分配到该房间,更新宿舍数量信息;4. 若未找到符合条件的房间,提示学生重新选择或申请特殊宿舍。
c语言课程设计宿舍管理系统一、教学目标本章节的教学目标是使学生掌握C语言编程基础,能够运用C语言设计并实现一个简单的宿舍管理系统。
具体目标如下:1.知识目标:•掌握C语言的基本语法和数据结构;•理解函数的定义和调用;•熟悉常用的输入输出库函数;•了解结构体和文件操作。
2.技能目标:•能够编写简单的C语言程序;•能够运用结构体设计数据模型;•能够实现文件的读写操作;•能够运用C语言实现宿舍管理系统的功能。
3.情感态度价值观目标:•培养学生的编程兴趣和自主学习能力;•培养学生解决问题的能力和团队合作精神;•使学生认识到计算机科学在实际生活中的重要性。
二、教学内容本章节的教学内容主要包括以下几个部分:1.C语言基本语法和数据结构;2.函数的定义和调用;3.常用的输入输出库函数;4.结构体的运用;5.文件的读写操作;6.宿舍管理系统的需求分析和设计。
三、教学方法为了达到本章节的教学目标,将采用以下几种教学方法:1.讲授法:讲解C语言的基本语法、数据结构和函数的定义和调用;2.案例分析法:通过分析实际案例,使学生掌握结构体的运用和文件的读写操作;3.实验法:让学生动手编写宿舍管理系统的程序,巩固所学知识;4.讨论法:分组讨论问题,培养学生的团队合作精神和问题解决能力。
四、教学资源为了支持本章节的教学内容和教学方法的实施,将准备以下教学资源:1.教材:《C语言程序设计》;2.参考书:《C语言 Primer》;3.多媒体资料:PPT课件、教学视频;4.实验设备:计算机、编程环境。
五、教学评估为了全面、客观地评估学生的学习成果,本章节的教学评估将采用以下几种方式:1.平时表现:通过课堂参与、提问、讨论等环节,评估学生的学习态度和积极性;2.作业:布置适量的作业,评估学生的编程能力和对知识的掌握程度;3.考试:进行期中和期末考试,评估学生的综合运用能力和复习效果。
评估标准将根据教学目标和教材内容进行制定,确保评估方式与教学内容相符。
河南工程学院《数据结构》课程设计成果报告姓名学号学院计算机学院专业班级计算机科学与技术 1521专业课程数据结构指导老师李芳2016年6月20日河南工程学院计算机学院课程设计报告书课程设计题目:课程设计时间:6月20日~6月24日课程设计地点:计算机学院1201课程设计单位:计算机学院指导教师:李芳学院院长:曲宏山目录目录1 设计目标 (1)2 课题分析 (1)2.1需求分析 (1)2.2 存储结构设计 (2)2.3 算法设计及其分析 (2)2.4程序流程图 (11)3程序清单 (12)4系统测试 (30)4.1测试数据 (30)4.2测试结果 (31)5总结 (33)5.1收获 (33)5.2不足 (33)5.3算法改进分析 (33)1 设计目标随着计算机技术的发展以及网络的发展,对学生宿舍的管理与控制越来越实用并且得到管理者的证实,无论是查询还是修改都有很方便,查询的信息一目了然。
这个程序包含了学生宿舍信息的录入、修改,学生楼栋信息的录入、毕业生的退舍、智能分配宿舍等功能,但不能进行删除的操作,总体来说使用简单方便。
这个程序应该满足以下几个要求:(1)信息的输入:需要建立起完整的宿舍信息数据库,从而实现通过输入学生入住的楼栋号、宿舍号,该宿舍入住的人数以及入住的学生的信息(包括学生的姓名、学号和系别),来添加学生信息,实现信息录入。
(2)信息的修改:进行信息输入后,过一段时间后,想要对里面的信息进行修改,可以通过学号等关键字对其进行修改。
(3)信息的查询:这个程序应该可以实现通过按学号或房号进行查找的过程。
在此使用的是折半法,查找过程是:先确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止。
这样可以缩短查找时间,同时还可以减少查找的次数。
(4)退出程序:当完成了所有的操作之后就要进行退出操作了。
2 课题分析2.1需求分析学生宿舍管理是一个很大的项目,在早期,还没有利用计算机管理时,一切都是利用人工进行管理的,这样管理起来既烦琐又复杂,资料也很容易被丢失,而且耗时、耗资金。
而利用本系统,可以高效地对学生宿舍进行统一管理与控制,资料也不容易被丢失,这样大大节省了人力与资源,提高了管理效率,给管理人员带来很多方便,基于以上分析有如下分析:(1)要实现交互工作方式,各项操作结束后均应返回主菜单。
(2)系统本无任何信息数据,要建立数据文件,需要开发一个信息录入功能,即首先创建一个学员线性表,同时我们可以将数据暂时保存在内存中,所以我们开发信息存盘功能;(3)信息录入后都要保存在内存中,用户看不到,需要设计一个信息显示功能,信息的显示应该便于查询,所以需要具备按各种关键字显示的功能;(4)由于有些新同学入校,所以设计了插入功能;(5)当用户操作完毕需要退出时,提供了退出选项,便于使用者退出交互式工作系统2.2 存储结构设计本系定义的存储结构为顺序存储结构,结构体为typedef struct{char ID[20]; //学号char name[20]; //姓名char gender[10]; //性别char dormitory[4]; //宿舍号}Student;typedef struct{char ID[4]; //宿舍号int max_num; //可容纳人数int current_num; //已入住人数char gender[10]; //男舍或女舍2.3 算法设计及其分析在此系统中,根据对查阅资料的了解,我们对宿舍人员的信息以及各种函数进行了定义,具体如下:(1)将宿舍人员信息定义为一个名字为typedef struct的结构体,其中包括char ID{20},char name[20],cahr gender[10],char dormitory[4]分别表示学号、姓名、性别和宿舍号,将宿舍信息定义为一个名字为typedef struct的结构体,其中包括char ID[4],char max_num,char current_num,char gender[10],分别是宿舍号、可容纳人数、已入住人数、男舍或者女舍。
(2)功能函数加上主函数一共有十二个,功能函数包括create(),open(),insert_dorm(),insert_stu(),dormnumsearch(),change(),namesearch(),check_out(),numsearch(),exchange(),display(),main(),分别用新增楼栋,新增宿舍信息,新增学生入住宿舍信息,毕业生退舍,互换宿舍,姓名查询,学号查询,宿舍号查询,互换宿舍,调换宿舍,职能分配宿舍,退出本系统的功能。
(3)在主函数中,使用一个while语句来选择调用主菜单中的各个功能函数。
由于本人负责新增宿舍楼栋,新增宿舍信息,新增学生宿舍信息的功能,所以操作如下:单击数字键“0”则为新增楼栋信息单击数字键“1”则为新增宿舍信息单击数字键“2”则为新增学生宿舍信息在每次操作前都要输入相应的编号。
各功能函数的具体实现如下:void create(){printf("\n请输入新增楼栋名称:\n");scanf("%s", filename);_fp = fopen(filename, "rb+");if (_fp == NULL){ //如果文件不存在则建立文件否则提示文件已存在_fp = fopen(filename, "wb+");fp = fopen(strcat(filename, "学生"), "wb+");if (fp == NULL || _fp == NULL){printf("File not open!\n");exit(-1);}}elseprintf("文件已存在!\n");fclose(fp);fclose(_fp);}void open(){printf("请输入学生宿舍所在楼栋:\n");scanf("%s", filename);_fp = fopen(filename, "rb+");fp = fopen(strcat(filename, "学生"), "rb+");if (fp == NULL || _fp == NULL){printf("File not open!\n");exit(-1);}}void insert_dorm(){Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入宿舍号,可容纳学生数,已容纳学生数,男舍/女舍(空格隔开,‘#’结束):\n");scanf("%s", d->ID);while (strcmp(d->ID, "#")){scanf("%d %d %s", &d->max_num, &d->current_num, d->gender);fwrite(d, sizeof(Dormitory), 1, _fp);scanf("%s", d->ID);}fclose(_fp);fclose(fp);}void insert_stu(){long locate, pre_locate;int flag = 0;Student *s = (Student*)malloc(sizeof(Student));Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入学号、姓名、性别、宿舍号(空格隔开,‘#’结束):\n");scanf("%s", s->ID);while (strcmp(s->ID, "#")){ //不相等继续读取,相等为0便退出循环不再读取数据scanf("%s %s %s", s->name, s->gender, s->dormitory);locate = ftell(_fp);while (fread(d, sizeof(Dormitory), 1, _fp)){if (!strcmp(d->ID, s->dormitory)){ //每增加一个学生,相应寝室的实际人数应当增加一个fseek(_fp, locate, SEEK_SET);d->current_num++;fwrite(d, sizeof(Dormitory), 1, _fp);flag = 1;break;}locate = ftell(_fp);}if (flag == 0){printf("不存在该宿舍!\n");exit(-1);}fwrite(s, sizeof(Student), 1, fp);rewind(_fp);scanf("%s", s->ID);}fclose(_fp);fclose(fp);}void change(){int flag = 0, tag = 0;long locate, locate_b, locate_c;char input_stunum[20];char input_dormnum[4];char previous_dormnum[4];Student *s = (Student*)malloc(sizeof(Student));Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入需要调换宿舍学生学号:\n");scanf("%s", input_stunum);locate = ftell(fp);while (fread(s, sizeof(Student), 1, fp)){if (!strcmp(input_stunum, s->ID)){flag = 1;printf("该学生信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");printf("%-20s%-20s%-20s%-20s\n", s->ID, s->name, s->gender,s->dormitory);strcmp(previous_dormnum, s->dormitory);printf("\n请输入新宿舍的宿舍号:\n");scanf("%s", input_dormnum);locate_b = ftell(_fp);while (fread(d, sizeof(Dormitory), 1, _fp)){if (!strcmp(input_dormnum, d->ID)){tag = 1;if (d->current_num == d->max_num)printf("该宿舍已满员!");else{//更换学生宿舍信息fseek(fp, locate, SEEK_SET);strcpy(s->dormitory, input_dormnum);fwrite(s, sizeof(Student), 1, fp);//更换新宿舍信息fseek(_fp, locate_b, SEEK_SET);d->current_num++;fwrite(d, sizeof(Dormitory), 1, _fp);rewind(_fp);//更换旧宿舍信息locate_c = ftell(_fp);while (fread(d, sizeof(Dormitory), 1, _fp)){if (!strcmp(previous_dormnum, d->ID)){fseek(_fp, locate_c, SEEK_SET);d->current_num--;fwrite(d, sizeof(Dormitory), 1, _fp);break;}locate_c = ftell(_fp);}}break;}locate_b = ftell(_fp);}if (tag == 0){printf("不存在该宿舍!");exit(-1);}break;}locate = ftell(fp);}if (flag == 0)printf("\n不存在该学生!\n");fclose(_fp);fclose(fp);}void namesearch(){int flag = 0, tag = 0;long locate;char input_name[20];char dor_num[4];char ID[20];Student *s = (Student*)malloc(sizeof(Student));Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入需要搜索的姓名:\n");scanf("%s", input_name);while (fread(s, sizeof(Student), 1, fp)){locate = ftell(fp); //记录下按名字搜索到达的位置if (!strcmp(input_name, s->name)){flag = 1;printf("\n学生信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");printf("%-20s%-20s%-20s%-20s\n", s->ID, s->name, s->gender,s->dormitory);strcpy(dor_num, s->dormitory);strcpy(ID, s->ID);rewind(fp); //指针重置于文件头,查找室友printf("\n其室友信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");while (fread(s, sizeof(Student), 1, fp)){ //室友宿舍号相同,学号不同if ((!strcmp(dor_num, s->dormitory)) && (strcmp(s->ID, ID))){printf("%-20s%-20s%-20s%-20s\n", s->ID, s->name, s->gender, s->dormitory);tag = 1;}}if (tag == 0)printf("\n没有室友!\n");tag = 0;while (fread(d, sizeof(Dormitory), 1, _fp)){if (!strcmp(dor_num, d->ID)){printf("\n该学生所在寝室信息如下:\n%-20s%-20s%-20s%-20s\n", "宿舍号", "可容纳学生数", "已容纳学生数", "男舍/女舍");printf("%-20s%-20d%-20d%-20s\n", d->ID, d->max_num,d->current_num, d->gender);break;}}//break;}//同名情况if (flag)fseek(fp, locate, SEEK_SET);}if (flag == 0)printf("\n没有符合条件的学生的记录!\n");fclose(_fp);fclose(fp);}void check_out(){char stu_num[20];char dorm_num[20];long locate, locate_b;Student *s = (Student*)malloc(sizeof(Student));Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入退宿学生学号:\n");scanf("%s", stu_num);locate = ftell(fp);while (fread(s, sizeof(Student), 1, fp)){// locate=ftell(fp);if (!strcmp(s->ID, stu_num)){strcpy(dorm_num, s->dormitory);fseek(fp, locate, SEEK_SET);memset(s, 0, sizeof(Student));fwrite(s, sizeof(Student), 1, fp);2.4程序流程图3程序清单#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct{char ID[20]; //学号char name[20]; //姓名char gender[10]; //性别char dormitory[4]; //宿舍号}Student;typedef struct{char ID[4]; //宿舍号int max_num; //可容纳人数int current_num; //已入住人数char gender[10]; //男舍或女舍}Dormitory;char filename[20];FILE *fp; //学生信息文件指针FILE *_fp; //宿舍信息文件指针void create(){printf("\n请输入新增楼栋名称:\n");scanf("%s", filename);_fp = fopen(filename, "rb+");if (_fp == NULL){ //如果文件不存在则建立文件否则提示文件已存在_fp = fopen(filename, "wb+");fp = fopen(strcat(filename, "学生"), "wb+");if (fp == NULL || _fp == NULL){printf("File not open!\n");exit(-1);}}elseprintf("文件已存在!\n");fclose(fp);fclose(_fp);}void open(){printf("请输入学生宿舍所在楼栋:\n");scanf("%s", filename);_fp = fopen(filename, "rb+");fp = fopen(strcat(filename, "学生"), "rb+");if (fp == NULL || _fp == NULL){printf("File not open!\n");exit(-1);}}void insert_dorm(){Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入宿舍号,可容纳学生数,已容纳学生数,男舍/女舍(空格隔开,‘#’结束):\n");scanf("%s", d->ID);while (strcmp(d->ID, "#")){scanf("%d %d %s", &d->max_num, &d->current_num, d->gender);fwrite(d, sizeof(Dormitory), 1, _fp);scanf("%s", d->ID);}fclose(_fp);fclose(fp);}void insert_stu(){long locate, pre_locate;int flag = 0;Student *s = (Student*)malloc(sizeof(Student));Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入学号、姓名、性别、宿舍号(空格隔开,‘#’结束):\n");scanf("%s", s->ID);while (strcmp(s->ID, "#")){ //不相等继续读取,相等为0便退出循环不再读取数据scanf("%s %s %s", s->name, s->gender, s->dormitory);locate = ftell(_fp);while (fread(d, sizeof(Dormitory), 1, _fp)){if (!strcmp(d->ID, s->dormitory)){ //每增加一个学生,相应寝室的实际人数应当增加一个fseek(_fp, locate, SEEK_SET);d->current_num++;fwrite(d, sizeof(Dormitory), 1, _fp);flag = 1;break;}locate = ftell(_fp);}if (flag == 0){printf("不存在该宿舍!\n");exit(-1);}fwrite(s, sizeof(Student), 1, fp);rewind(_fp);scanf("%s", s->ID);}fclose(_fp);fclose(fp);}void dormnumsearch(){int flag = 0, tag = 0;char input_dormnum[4];Student *s = (Student*)malloc(sizeof(Student));Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("请输入需要搜索的宿舍号:\n");scanf("%s", input_dormnum);while (fread(d, sizeof(Dormitory), 1, _fp)){if (!strcmp(input_dormnum, d->ID)){flag = 1;printf("\n寝室信息如下:\n%-20s%-20s%-20s%-20s\n", "宿舍号", "可容纳学生数", "已容纳学生数", "男舍/女舍");printf("%-20s%-20d%-20d%-20s\n", d->ID, d->max_num, d->current_num,d->gender);break;}}if (flag){printf("该宿舍学生信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");while (fread(s, sizeof(Student), 1, fp)){if (!strcmp(input_dormnum, s->dormitory)){tag = 1;printf("%-20s%-20s%-20s%-20s\n", s->ID, s->name, s->gender,s->dormitory);}}if (tag == 0)printf("\n该宿舍没有学生入住!\n");}elseprintf("不存在该宿舍记录!!\n");fclose(_fp);fclose(fp);}void change(){int flag = 0, tag = 0;long locate, locate_b, locate_c;char input_stunum[20];char input_dormnum[4];char previous_dormnum[4];Student *s = (Student*)malloc(sizeof(Student));Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入需要调换宿舍学生学号:\n");scanf("%s", input_stunum);locate = ftell(fp);while (fread(s, sizeof(Student), 1, fp)){if (!strcmp(input_stunum, s->ID)){flag = 1;printf("该学生信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");printf("%-20s%-20s%-20s%-20s\n", s->ID, s->name, s->gender,s->dormitory);strcmp(previous_dormnum, s->dormitory);printf("\n请输入新宿舍的宿舍号:\n");scanf("%s", input_dormnum);locate_b = ftell(_fp);while (fread(d, sizeof(Dormitory), 1, _fp)){if (!strcmp(input_dormnum, d->ID)){tag = 1;if (d->current_num == d->max_num)printf("该宿舍已满员!");else{//更换学生宿舍信息fseek(fp, locate, SEEK_SET);strcpy(s->dormitory, input_dormnum);fwrite(s, sizeof(Student), 1, fp);//更换新宿舍信息fseek(_fp, locate_b, SEEK_SET);d->current_num++;fwrite(d, sizeof(Dormitory), 1, _fp);rewind(_fp);//更换旧宿舍信息locate_c = ftell(_fp);while (fread(d, sizeof(Dormitory), 1, _fp)){if (!strcmp(previous_dormnum, d->ID)){fseek(_fp, locate_c, SEEK_SET);d->current_num--;fwrite(d, sizeof(Dormitory), 1, _fp);break;}locate_c = ftell(_fp);}}break;}locate_b = ftell(_fp);}if (tag == 0){printf("不存在该宿舍!");exit(-1);}break;}locate = ftell(fp);}if (flag == 0)printf("\n不存在该学生!\n");fclose(_fp);fclose(fp);}void namesearch(){int flag = 0, tag = 0;long locate;char input_name[20];char dor_num[4];char ID[20];Student *s = (Student*)malloc(sizeof(Student));Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入需要搜索的姓名:\n");scanf("%s", input_name);while (fread(s, sizeof(Student), 1, fp)){locate = ftell(fp); //记录下按名字搜索到达的位置if (!strcmp(input_name, s->name)){flag = 1;printf("\n学生信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");printf("%-20s%-20s%-20s%-20s\n", s->ID, s->name, s->gender,s->dormitory);strcpy(dor_num, s->dormitory);strcpy(ID, s->ID);rewind(fp); //指针重置于文件头,查找室友printf("\n其室友信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名","性别", "宿舍号");while (fread(s, sizeof(Student), 1, fp)){ //室友宿舍号相同,学号不同if ((!strcmp(dor_num, s->dormitory)) && (strcmp(s->ID, ID))){printf("%-20s%-20s%-20s%-20s\n", s->ID, s->name, s->gender, s->dormitory);tag = 1;}}if (tag == 0)printf("\n没有室友!\n");tag = 0;while (fread(d, sizeof(Dormitory), 1, _fp)){if (!strcmp(dor_num, d->ID)){printf("\n该学生所在寝室信息如下:\n%-20s%-20s%-20s%-20s\n", "宿舍号", "可容纳学生数", "已容纳学生数", "男舍/女舍");printf("%-20s%-20d%-20d%-20s\n", d->ID, d->max_num,d->current_num, d->gender);break;}}//break;}//同名情况if (flag)fseek(fp, locate, SEEK_SET);}if (flag == 0)printf("\n没有符合条件的学生的记录!\n");fclose(_fp);fclose(fp);}void check_out(){char stu_num[20];char dorm_num[20];long locate, locate_b;Student *s = (Student*)malloc(sizeof(Student));Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入退宿学生学号:\n");scanf("%s", stu_num);locate = ftell(fp);while (fread(s, sizeof(Student), 1, fp)){// locate=ftell(fp);if (!strcmp(s->ID, stu_num)){strcpy(dorm_num, s->dormitory);fseek(fp, locate, SEEK_SET);memset(s, 0, sizeof(Student));fwrite(s, sizeof(Student), 1, fp);break;}locate = ftell(fp);}locate_b = ftell(_fp);while (fread(d, sizeof(Dormitory), 1, _fp)){if (!strcmp(d->ID, dorm_num)){fseek(_fp, locate_b, SEEK_SET);d->current_num--;//printf("111\n");//printf("%d\n",d->current_num);fwrite(d, sizeof(Dormitory), 1, _fp);printf("删除成功!\n");break;}locate_b = ftell(_fp);}fclose(_fp);fclose(fp);}void numsearch(){int flag = 0, tag = 0;char input_num[20];char dor_num[4];Student *s = (Student*)malloc(sizeof(Student));Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入需要搜索的学号:\n");scanf("%s", input_num);while (fread(s, sizeof(Student), 1, fp)){if (!strcmp(input_num, s->ID)){flag = 1;printf("\n该学生信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");printf("%-20s%-20s%-20s%-20s\n", s->ID, s->name, s->gender,s->dormitory);break;}}strcpy(dor_num, s->dormitory);if (flag){rewind(fp);printf("\n室友信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");while (fread(s, sizeof(Student), 1, fp)){if ((!strcmp(dor_num, s->dormitory)) && strcmp(input_num, s->ID)){ printf("%-20s%-20s%-20s%-20s\n", s->ID, s->name, s->gender,s->dormitory);tag = 1;}}if (tag == 0)printf("\n没有室友!\n");while (fread(d, sizeof(Dormitory), 1, _fp)){if (!strcmp(dor_num, d->ID)){printf("\n该学生所在寝室信息如下:\n%-20s%-20s%-20s%-20s\n", "宿舍号", "可容纳学生数", "已容纳学生数", "男舍/女舍");printf("%-20s%-20d%-20d%-20s\n", d->ID, d->max_num,d->current_num, d->gender);break;}}}elseprintf("\n没有该学生的记录!\n");fclose(_fp);fclose(fp);}void exchange(){int flag = 0, tag = 0;long locate_a, locate_b;char input_ID_a[20];char input_ID_b[20];char dor_num[4];Student *s = (Student*)malloc(sizeof(Student));Student *_s = (Student*)malloc(sizeof(Student));open();printf("\n请输入需要互换宿舍学生A的学号:\n");scanf("%s", input_ID_a);printf("\n请输入需要互换宿舍学生B的学号:\n");scanf("%s", input_ID_b);locate_a = ftell(fp);while (fread(s, sizeof(Student), 1, fp)){if (!strcmp(input_ID_a, s->ID)){printf("\n学生A信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");printf("%-20s%-20s%-20s%-20s\n", s->ID, s->name, s->gender,s->dormitory);flag = 1;break;}locate_a = ftell(fp);}rewind(fp);locate_b = ftell(fp);while (fread(_s, sizeof(Student), 1, fp)){if (!strcmp(input_ID_b, _s->ID)){printf("\n学生B信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");printf("%-20s%-20s%-20s%-20s\n", _s->ID, _s->name, _s->gender,_s->dormitory);tag = 1;break;}locate_b = ftell(fp);}if (flag == 0 || tag == 0){printf("不存在A同学或B同学记录!");exit(-1);}else{strcpy(dor_num, s->dormitory);strcpy(s->dormitory, _s->dormitory);strcpy(_s->dormitory, dor_num);//locate_a=locate_a-sizeof(Student);fseek(fp, locate_a, 0);fwrite(s, sizeof(Student), 1, fp);// locate_b=locate_b-sizeof(Student);fseek(fp, locate_b, 0);fwrite(_s, sizeof(Student), 1, fp);}printf("更换宿舍后:\n");rewind(fp);locate_a = ftell(fp);while (fread(s, sizeof(Student), 1, fp)){if (!strcmp(input_ID_a, s->ID)){printf("\n学生A信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");printf("%-20s%-20s%-20s%-20s\n", s->ID, s->name, s->gender,s->dormitory);break;}locate_a = ftell(fp);}locate_b = ftell(fp);while (fread(_s, sizeof(Student), 1, fp)){if (!strcmp(input_ID_b, _s->ID)){printf("\n学生B信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");printf("%-20s%-20s%-20s%-20s\n", _s->ID, _s->name, _s->gender,_s->dormitory);break;}locate_b = ftell(fp);}fclose(_fp);fclose(fp);}void display(){long locate;Student *s = (Student*)malloc(sizeof(Student));Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入学号、姓名、性别:\n");scanf("%s %s %s", s->ID, s->name, s->gender);locate = ftell(_fp);while (fread(d, sizeof(Dormitory), 1, _fp)){if (d->max_num = d->current_num){strcpy(s->dormitory, d->ID);fwrite(s, sizeof(Student), 1, fp);fseek(_fp, locate, 0);d->current_num++;fwrite(d, sizeof(Dormitory), 1, _fp);printf("分配的宿舍是:");printf("%s\n", s->dormitory);break;}locate = ftell(fp);}fclose(_fp);fclose(fp);}int main(){int select, flag = 1; //flag为0则退出程序while (flag){printf("\t\t------------------------------------------------------\n");printf("\t\t\t 学生宿舍管理系统\n\n");printf("\t\t\t 0 ---------------- 新增楼栋\n");printf("\t\t\t 1 ---------------- 新增宿舍信息\n");printf("\t\t\t 2 ---------------- 新增学生住宿信息\n");printf("\t\t\t 3 ---------------- 互换宿舍\n");printf("\t\t\t 4 ---------------- 调换宿舍\n");printf("\t\t\t 5 ---------------- 学生毕业退宿\n");printf("\t\t\t 6 ---------------- 智能分配宿舍\n");printf("\t\t\t 7 ---------------- 学号查询\n");printf("\t\t\t 8 ---------------- 姓名查询\n");printf("\t\t\t 9 ---------------- 房号查询\n");printf("\t\t\t 10 ---------------- 退出系统\n");printf("\t\t------------------------------------------------------\n"); printf("请输入你的操作编号(0~10):");scanf("%d", &select);switch (select){case 0:create();break;case 1:insert_dorm();break;case 2:insert_stu();break;case 3:exchange();break;case 4:change();break;case 5:check_out();break;case 6:display();break;case 7:numsearch();break;case 8:namesearch();break;case 9:dormnumsearch();break;case 10:return 0;defaut:break;}}return 0;}4系统测试4.1测试数据(1)程序启动时的界面(2)测试的数据楼栋号宿舍号男舍/女舍学生姓名性别1 110 男舍小明男1 110 男舍小张男1 110 男舍小李男1 110 男舍小王男4.2测试结果(1)新增楼栋(2)新增宿舍(3)新增学生宿舍信息5总结5.1收获通过这次实验,我拓宽了知识面,锻炼了能力,同时使个人的综合素质得到较大提高。