宿舍管理方案计划系统C语言学习知识实验报告.doc

举报
资源描述
-! C语言程序设计报告 题 目:宿舍管理系统 院系名称:电子工程学院 专业名称:计算机科学与技术 班 级:1001 学生姓名:XXX 学号(8位):13 指导教师:XXX 设计起止时间:2011年6月22日~2011年6月30日 一. 设计目的 学生宿舍管理系统对于一个学校来说是必不可少的组成部分。目前好多学校还停留在宿舍管理人员手工记录数据的最初阶段,手工记录对于规模小的学校来说还勉强可以接受,但对于学生信息量比较庞大,需要记录存档的数据的高校来说,人工记录是相当麻烦的。而且当查找某条记录时,由于数据量庞大,还只能靠人工一条条去查找,这样不但麻烦还浪费了许多时间,效率也比较低。当今社会是飞速进步的而世界,原始的记录方式已经被社会所淘汰,计算机化管理正是适应时代的产物。信息世界永远不会是一个平静的世界,当一种技术不能满足需求时,就会有新的技术诞生并取代旧技术。21世纪的今天,信息社会占着主流地位,,计算机在各行各业中的运用已经得到普及,自动化、信息化的管理越来越广泛应用于各个领域。故随着宿舍需要管理的信息快速增长,建立一个宿舍管理系统可使宿舍管理人员的管理工作系统化、规范化、自动化,大大提高管理效率。 二. 设计内容 1.录入学生信息 2.显示学生信息 3.插入学生信息 4.修改学生信息 5.删除学生信息 6.排序学生信息 7.统计学生信息 8.管理员密码 三.概要设计 1.录入学生信息将信息保存至文件中 2.从文件中读取信息显示出学生信息 3. 从文件中读取信息存至单链表中,传递头指针从而修改学生信息,再将修改完成的学生信息保存至文件中 4. 从文件中读取信息存至单链表中,传递头指针从然后用冒泡法排序学生信息,再将修改完成的学生信息保存至文件中 5.统计学生信息按照宿舍号、楼层、楼号分别统计出人数 6.管理员进入此系统需输入密码,而学生进入则不需要 1.功能模块图; 主函数 密码 管理员 文件 存入单链表 录入 显示 插入 删除 修改 排序 存入文件 统计 学生 2.各个模块详细的功能描述。 1.录入学生信息 录入学生信息将信息保存至文件中 2.显示学生信息 从文件中读取信息显示出学生信息 3.插入学生信息 从文件中读取信息存至单链表中,传递头指针从而插入学生信息,再将修改完成的学生信息保存至文件中 4.修改学生信息 从文件中读取信息存至单链表中,传递头指针从而修改学生信息,再将修改完成的学生信息保存至文件中 5.删除学生信息 从文件中读取信息存至单链表中,传递头指针从而删除学生信息,再将修改完成的学生信息保存至文件中 6.排序学生信息 从文件中读取信息存至单链表中,传递头指针从然后用冒泡法排序学生信息,再将修改完成的学生信息保存至文件中 7.统计学生信息 统计学生信息按照宿舍号、楼层、楼号分别统计出人数 四.测试数据及运行结果 1.正常测试数据和运行结果 要求提供3组正常测试数据和运行结果 排序 查找 2.异常测试数据及运行结果 要求提供2组异常测试数据和运行结果 五.调试情况,设计技巧及体会 1.改进方案 对自己的设计进行评价,指出合理和不足之处,提出改进方案; 管理员密码不精致,会被管理员以外的人看到保密性不好。插入、删除、修改等函数太过繁琐。 2.体会 对设计及调试过程的心得体会: 在这一周多的实习中,让我对C语言有了更深刻的认识,不但复习了原来所学的知识,更对新的知识有了了解。在调试过程中,通过自己学习,寻求老师、同学的帮助解决了许多不懂的问题。 六.参考文献 C语言程序设计(第二版) 七.附录: 源代码(电子版) #include #include #include #include #include #include #define P "学号:%-8ld姓名:%-8s班级:%-10s楼号:%-3s楼层:%-3s宿舍号:%-3s\n",p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum #define N sizeof(struct stud) manager(); main(); student(); struct stud { long num; char name[20]; char classes[20]; char bnum[5]; char fnum[5]; char rnum[5]; struct stud *next; }; struct node { char mima[10]; struct node *next; }; /*********************************************************************************************************/ // 录入学生信息 /*********************************************************************************************************/ struct stud *input_message() { struct stud *p1,*p2,*head; FILE *fp; fp=fopen("student_message.txt","wt"); head=p2=(struct stud *)malloc(N); /*head p2指向头结点*/ printf("请输入 学号 姓名 班级 楼号 楼层 宿舍号(输入0结束)\n"); p1=(struct stud *)malloc(N); /*p1指向第一个结点*/ scanf("%ld %s %s %s %s %s",&p1->num,p1->name,p1->classes,p1->bnum,p1->fnum,p1->rnum); if(p1->num!=0) fprintf(fp,"%ld %s %s %s %s %s\n",p1->num,p1->name,p1->classes,p1->bnum,p1->fnum,p1->rnum); while(p1->num!=0) { p2->next=p1; /*将新结点连接到表尾*/ p2=p1; /*p2指向新的表尾*/ p1=(struct stud *)malloc(N); /*p1指向新申请的结点*/ scanf("%ld %s %s %s %s %s",&p1->num,p1->name,p1->classes,p1->bnum,p1->fnum,p1->rnum); if(p1->num!=0) fprintf(fp,"%ld %s %s %s %s %s\n",p1->num,p1->name,p1->classes,p1->bnum,p1->fnum,p1->rnum); } fclose(fp); p2->next=NULL; /*表尾结点next置空*/ free(p1); /*释放无效结点*/ return head; } /*********************************************************************************************************/ // 将文件中的信息存入单链表 /*********************************************************************************************************/ struct stud *inread() /*将文件中的信息存入单链表*/ { struct stud *head,*p,*p1; FILE *fp; fp=fopen("student_message.txt","rt"); if(fp==NULL) { printf("读出文件出错,按任意键退出"); exit(1); } head=(struct stud *)malloc(N); head->next=NULL; p=head; while(!feof(fp)) { p1=(struct stud*)malloc(N); fscanf(fp,"%ld %s %s %s %s %s\n",&p1->num,p1->name,p1->classes,p1->bnum,p1->fnum,p1->rnum); p->next=p1; /*连接结点*/ p=p1; } p->next=NULL; fclose(fp); return head; } /*********************************************************************************************************/ // 显示学生信息 /*********************************************************************************************************/ revise_message() { FILE *fp; struct stud *p; int n=0,a,fsize; p=(struct stud *)malloc(N); fp=fopen("student_message.txt","rt"); if(fp==NULL) { printf("\n 打开文件失败!"); exit(1); } while(!feof(fp)) /*文件未结束执行循环*/ { a=fileno(fp); fsize=filelength(a); /*判断文件大小 */ if(fsize==0) break; fscanf(fp,"%ld %s %s %s %s %s\n",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum); printf(P); n=1; } fclose(fp); if(n==0) printf("无记录!!!\n"); } /*********************************************************************************************************/ // 将单链表的信息保存至文件中 /*********************************************************************************************************/ baocun(struct stud *p) { struct stud *p1; FILE *fp; fp=fopen("student_message.txt","wt"); if(fp==NULL) { printf("写入文件出错,按任意键退出"); exit(1); } for(p1=p->next;p1!=NULL;p1=p1->next) fprintf(fp,"%ld %s %s %s %s %s\n",p1->num,p1->name,p1->classes,p1->bnum,p1->fnum,p1->rnum); fclose(fp); } /*********************************************************************************************************/ // 查询学生信息 /*********************************************************************************************************/ find_message() { long nnum; int a,b,n,m; FILE *fp; struct stud *p; fp=fopen("student_message.txt","rt"); p=(struct stud *)malloc(N); system("cls"); printf("\n\n\n\n"); printf(" *********************************** \n"); printf(" 欢迎进入宿舍管理系统 \n"); printf(" *********************************** \n"); printf("\n 1.返回上一级 \n"); printf("\n 1.按学生学号查找 \n"); printf("\n 2.按学生姓名查找 \n"); printf("\n 3.按宿舍号查找 \n"); printf("\n\n\n"); printf("请选择:"); scanf("%d",&b); printf("\n\n\n"); // 按学生学生学号 if(b==1) { printf("\n请输入要查找的人的学号:\n"); scanf("%ld",&nnum); while(!feof(fp)) { fscanf(fp,"%ld %s %s %s %s %s\n",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum); if(p->num==nnum) { printf(P); a=1; } /*标志*/ } if(a!=1) printf("\n没有找到此人!!!!\n"); } // 按学生姓名查找 if(b==2) { char nname[20]; printf("\n请输入要查找的人的姓名:"); scanf("%s",&nname); while(!feof(fp)) { fscanf(fp,"%ld %s %s %s %s %s\n",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum); n=strcmp(p->name,nname); if(n==0) { printf(P); a=1;}/*标志*/ } if(a!=1) printf("\n没有找到此人!!!!\n"); } if(b==3) { char nrnum[20]; printf("\n请输入要查找的宿舍号:"); scanf("%s",&nrnum); while(!feof(fp)) { fscanf(fp,"%ld %s %s %s %s %s\n",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum); m=strcmp(p->rnum,nrnum); if(m==0) { printf(P); a=1;}/*标志*/ } if(a!=1) printf("\n没有找到此宿舍!!!!\n"); } if(b==0) manager(); } /*********************************************************************************************************/ // 删除学生信息 /*********************************************************************************************************/ delete_message(struct stud *p0) { struct stud *p; long nnum; int a; p=p0->next; printf("请输入要删除的人的学号:"); scanf("%ld",&nnum); while(p!=NULL) { if(p->num==nnum) { p0->next=p->next; /*后续结点接到前面的结点上*/ printf("已删除此人!!!!"); a=1; /*标志常量*/ } p0=p; /*推移指针*/ p=p->next; } if(a!=1) printf("没有找到要删除的人!!!!"); } /*********************************************************************************************************/ // 插入和修改学生信息 /*********************************************************************************************************/ change_message(struct stud *p0) { long nnum; int a,b; system("cls"); printf("\n\n\n\n"); printf(" *********************************** \n"); printf(" 欢迎进入宿舍管理系统 \n"); printf(" *********************************** \n"); printf("\n 0.返回上一级 \n"); printf("\n 1.插入学生信息 \n"); printf("\n 2.修改学生信息 \n"); printf("\n\n\n"); printf("请选择:"); scanf("%d",&b); printf("\n\n\n"); if(b==1) { struct stud *p; p=(struct stud *)malloc(N); printf("请输入要插入的学号 姓名 班级 楼号 楼层 宿舍号\n"); scanf("%ld %s %s %s %s %s",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum); p->next=p0->next; /*后续结点连接到新结点后*/ p0->next=p; /*此时新接点处在头的位置*/ } if(b==2) { printf("请输入要修改的人的学号:"); scanf("%ld",&nnum); while(p0->next!=NULL) { p0=p0->next; /*指针后移*/ if(p0->num==nnum) { printf("请修改此人的姓名 班级 楼号 楼层 宿舍号:"); scanf("%s %s %s %s %s",p0->name,p0->classes,p0->bnum,p0->fnum,p0->rnum); printf("\n修改成功!!!!\n"); a=1; } /*标志*/ } if(a!=1) printf("\n没有找到此人!!!!\n"); } if(b==0) manager(); } /*********************************************************************************************************/ // 统计学生信息 /*********************************************************************************************************/ dorm_message() { int a,b,m; FILE *fp; struct stud *p; fp=fopen("student_message.txt","rt"); p=(struct stud *)malloc(N); a=0; system("cls"); printf("\n\n\n\n"); printf(" *********************************** \n"); printf(" 欢迎进入宿舍管理系统 \n"); printf(" *********************************** \n"); printf("\n 0.返回上一级 \n"); printf("\n 1.输入楼号统计人数 \n"); printf("\n 2.输入楼层号统计人数 \n"); printf("\n 3.输入宿舍号统计人数 \n"); printf("\n\n\n"); printf("请选择:"); scanf("%d",&b); printf("\n\n\n"); // 按楼号统计 if(b==1) { char nbnum[20]; printf("\n请输入要统计的楼号:\n"); scanf("%s",&nbnum); while(!feof(fp)) { fscanf(fp,"%ld %s %s %s %s %s\n",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum); m=strcmp(p->bnum,nbnum); if(m==0) { printf(P); a++; } } /*标志*/ printf("\n该楼共有%d人\n",a); } // 按楼层号统计 if(b==2) { char nfnum[20]; printf("\n请输入要统计的楼层号:\n"); scanf("%s",&nfnum); while(!feof(fp)) { fscanf(fp,"%ld %s %s %s %s %s\n",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum); m=strcmp(p->fnum,nfnum); if(m==0) { printf(P); a++; } } /*标志*/ printf("\n该楼层共有%d人\n",a); } // 按宿舍号统计 if(b==3) { char nrnum[20]; printf("\n请输入要统计的宿舍号:\n"); scanf("%s",&nrnum); while(!feof(fp)) { fscanf(fp,"%ld %s %s %s %s %s\n",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum); m=strcmp(p->rnum,nrnum); if(m==0) { printf(P); a++; } } /*标志*/ printf("\n该宿舍共有%d人\n",a); } if(b==0) manager(); } /*********************************************************************************************************/ // 排序学生信息 /*********************************************************************************************************/ paixu(struct stud *p0, struct stud *p1, struct stud *p2) { p0->next = p2; p1->next = p2->next; p2->next = p1; } sort_message(struct stud *p0) /*传递头指针*/ { int i,a; int flag; struct stud *p=NULL; system("cls"); printf("\n\n\n\n"); printf(" *********************************** \n"); printf(" 欢迎进入宿舍管理系统 \n"); printf(" *********************************** \n"); printf("\n 0.返回上一级 \n"); printf("\n 1.升序排序 \n"); printf("\n 2.降序排序 \n"); printf("\n\n\n"); printf("请选择:"); scanf("%d",&a); printf("\n\n\n"); if(a==1) { for (i=0; ; i++) { flag = 0; for (p=p0; p->next->next != NULL; p=p->next) /*冒泡排序*/ { if (p->next->num > p->next->next->num) { flag = 1; paixu(p, p->next, p->next->next); } } if (flag == 0) { printf("\n排序成功!!!!\n");break; } } } if(a==2) { for (i=0; ; i++) { flag = 0; for (p=p0; p->next->next != NULL; p=p->next) { if (p->next->num < p->next->next->num) { flag = 1; paixu(p, p->next, p->next->next); } } if (flag == 0) { printf("\n排序成功!!!!\n");break; } } } if(a==0) manager(); } /*********************************************************************************************************/ // 管理员密码 /*********************************************************************************************************/ mima() { int n; int a=3; struct node *p; char rmima[10]; FILE *fp; fp=fopen("mima_message.txt","rt"); p=(struct node *)malloc(sizeof(struct node)); while(!feof(fp)) { for(;a!=0;) {printf("请输入密码:\n"); scanf("%s",rmima); fscanf(fp,"%s\n",&p->mima); n=strcmp(p->mima,rmima); if(n==0) { manager(); } if(n!=0) printf("\n密码错误,还有%d次机会\n",a-1); a--; } } } void nmima() { FILE *fp; char nmima[10]; struct node *p; p=(struct nod
展开阅读全文
相关搜索
温馨提示:
taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

当前位置:首页 > 教育专区 > 教案示例


本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁