课程设计班级档案管理系统.docx
- 文档编号:748968
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:26
- 大小:181.99KB
课程设计班级档案管理系统.docx
《课程设计班级档案管理系统.docx》由会员分享,可在线阅读,更多相关《课程设计班级档案管理系统.docx(26页珍藏版)》请在冰点文库上搜索。
课程设计班级档案管理系统
《高级语言程序设计》
课程设计报告书
题目:
班级档案管理系统
专业:
计算机科学与技术
学号:
学生姓名:
指导教师:
完成日期:
一、设计内容与设计要求1
1.设计内容1
2.设计要求1
二、程序设计目的2
三、程序模块分析2
1.系统控制流程图2
2.部分主要函数算法流程图3
四、函数功能说明6
1.函数说明6
2.用户说明6
五、程序测试7
六、总结14
附录15
一、设计内容与设计要求
1.设计内容
对一个有N个学生的班级,通过该系统实现对该班级学生的基本信息进行录入、显示、修改、删除、保存等操作的管理。
2.设计要求
(1)本系统采用一个包含N个数据的结构体数组,每个学生的数据应当包括:
学号、姓名、性别、年龄、备注。
(2)本系统显示这样的菜单:
请选择系统功能项:
a从文件中读入学生基本信息
b添加新学生的基本信息
c学生基本信息显示
d学生基本信息保存至文件
e学生基本信息删除
f学生基本信息修改(要求先输入修改密码)
g学生基本信息查询
(1)按学号查询
(2)按姓名查询
(3)按性别查询
(4)按年龄查询
h退出系统
(3)执行一个具体的功能之后,程序将重新显示菜单。
(4)将学生基本信息保存到文件中。
(5)进入系统之前要先输入登录密码。
说明:
登录密码和修改密码使用文件保存。
二、课程设计目的
在平时学习C语言的过程中,通常只是在课堂上跟随老师的讲解来进行学习,因此在练习上较为缺乏,而课程设计恰恰弥补了这点,它不仅是对平时学习的一种检测,同时在做它的过程中也对自己学习的知识进行了巩固和提高,为以后的学习和工作打下了基础。
三、程序模块分析
1.系统控制流程图
2.部分主要函数算法流程图
图4.1:
read函数图4.2:
input函数
图4.3:
Delete函数
图4.4:
modi函数
图4.5:
search函数
四、函数功能说明
1.函数说明
main()函数是程序的入口有调取各个模块的的作用,里面包含一个switch语句,实现选择功能;
read():
读取函数,从文件中读取学生信息;
input():
添加函数,学生基本信息的录入;
save():
学生信息保存函数;
Delete():
删除函数;
search():
查找函数;
modi():
信息修改函数;
secretcode():
密码验证函数;
2.用户说明
输入密码进入系统后,通过a~g选项来进行功能选择。
选项a:
调用read函数,将在文件中保存的学生信息读入结构体数组中,然后在屏幕上显示出来,按enter键便重新返回菜单;
选项b:
调用input函数,输入需要添加的学生人数,显示出需要添加的信息,将信息填写完毕后,按enter键重新返回菜单,再通过选项c将新添加的学生信息保存到文件中;
选项c:
调用save函数将新输入或修改后的学生信息保存到文件中,在input函数和modi函数调用之后需要调用此函数,然后按enter键重新返回菜单;
选项d:
通过调用delete函数,输入需要删除的学生的学号,按enter键提示删除成功,该学生信息已被从文件中删除,并重新返回菜单;
选项e:
在调用该函数实现学生信息修改的功能时,需要输入修改密码,当密码错误时,提示密码错误,此时重新输入密码。
密码正确之后,输入需要修改信息的学生的学号,输出该学生信息,确认后输入新的学生信息,按enter键重新返回菜单,此时需要通过选项c将信息保存到文件中;
选项f:
通过调用search函数,在选择该项后,会出现一个子菜单,按照需求可以分别通过学号、姓名、性别和年龄来查询学生信息,按enter键显示查询信息并重新返回菜单。
五、程序测试
输入登陆密码123456进入系统
图5.1
输入a从文件中读入学生信息
图5.2
输入b添加学生的基本信息
图5.3
图5.4
输入c将信息保存至文件
图5.5
输入d删除学生信息
图5.6
信息删除成功
图5.7
再次从文件输入信息时需要删除的信息已被删除
图5.8
输入e进行学生信息修改
图5.9
图5.10
输入c将信息保存到文件中
图5.11
输入f学生信息的查询
图5.12
图5.13
六、总结
这次的课程设计给了我很大的体会,我能独立的完成这项任务,是对平时的学习和练习的一种肯定,同时也提高了自己的信心。
在完成它的过程中当然会遇到很多的困难,首先是结构体的定义问题,由于刚开始对程序的不熟悉,在定义结构体内元素数组时出现了错误,后来经过一次次的检测将数组定义到了一个合适的大小。
其次在input函数中,输入完新学生信息保存至文件中时,对文件原有信息进行了覆盖,因此为了避免这种情况,将for循环中的i从N-n开始,经过测试这种方法是有效的。
最后是删除函数,由于开始定义的年龄是整型变量,在对文件中的结构体数据进行删除时,在年龄的位置会出现数字0,从而使从文件中读取数据时出现乱码,于是便将年龄定义成字符型数组,利用strcpy函数将结构体数组的下一位元素将前一位元素进行覆盖,从而实现删除功能。
虽然较为成功的完成了课程设计,但由于知识和时间的局限性,系统仍然存在缺陷,我认为此系统还能通过链表来进行优化,链表的好处是可以通过指针更好的实现查找、修改和删除功能,因此如果有时间便会通过链表来时、使这个系统更加具有实用性。
附录
源程序清单
#include"stdafx.h"
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"conio.h"
#defineN4
structstudent//定义一个包含学生信息的结构体数组
{
charno[10];//学号
charname[8];//姓名
charsex[5];//性别
charage[5];//年龄
charnote[5];//备注
};
structstudentstu[N];//定义全局变量
voidmenu()//菜单函数
{
printf("\n");
printf("****************\n");
printf("**\n");
printf("*a.从文件中读入学生基本信息*\n");
printf("*b.添加新学生的基本信息*\n");
printf("*c.学生基本信息保存至文件*\n");
printf("*d.学生基本信息删除*\n");
printf("*e.学生基本信息修改*\n");
printf("*f.学生基本信息查询*\n");
printf("*g.退出系统*\n");
printf("**\n");
printf("****************\n");
printf("\n");
printf("请输入选项:
(a~g)\n");
}
voidinput()//学生基本信息的录入
{
inti;
intn;
printf("请输入添加学生数:
");
scanf("%d",&n);
for(i=N-n;i { printf("请输入学生的基本信息: \n"); printf("no: \n"); scanf("%s",stu[i].no); printf("name: \n"); scanf("%s",stu[i].name); printf("sex: \n"); scanf("%s",stu[i].sex); printf("age: \n"); scanf("%s",stu[i].age); printf("note: \n"); scanf("%s",stu[i].note); } printf("\n"); printf("请检查信息是否输入正确! \n"); printf("\n"); for(i=N-n;i { printf("%s%s%s%s%s\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].age,stu[i].note); } } voidsave()//学生信息保存 { FILE*fp; inti; fp=fopen("e: \\student.txt","w"); if(fp==NULL) { printf("文件不存在! \n"); exit(0); } for(i=0;i { if(strlen(stu[i].name)==4) { fprintf(fp,"%s%s%s%s%s\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].age,stu[i].note); } if(strlen(stu[i].name)==6) { fprintf(fp,"%s%s%s%s%s\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].age,stu[i].note); } } fclose(fp); fflush(fp); printf("保存成功! \n"); } voidDelete()//删除函数; { FILE*fp; fp=fopen("e: \\student.txt","w"); charnumber[10]; intf; boolflag=false; printf("删除学生信息: \n"); printf("请输入学号: \n"); scanf("%s",number); for(inti=0;i { if(! strcmp(number,stu[i].no)) { for(f=i;f { strcpy(stu[f].name,stu[f+1].name); strcpy(stu[f].note,stu[f+1].note); strcpy(stu[f].no,stu[f+1].no); strcpy(stu[f].sex,stu[f+1].sex); strcpy(stu[f].age,stu[f+1].age); } flag=true; } } if(! flag) { printf("该学生不存在! : \n"); Delete(); } for(i=0;i { fprintf(fp,"%s%s%s%s%s\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].age,stu[i].note); } printf("删除成功! \n"); fclose(fp); } voidsearch()//查找函数 { intf; FILE*fp; fp=fopen("e: \\student.txt","rb"); for(f=0;f { fscanf(fp,"%s%s%s%s%s",stu[f].no,stu[f].name,stu[f].sex,stu[f].age,stu[f].note); } boolflag=false;//定义一个bool类型进行判断 intm; inti; printf("1按学号查询\n"); printf("2按姓名查询\n"); printf("3按性别查询\n"); printf("4按年龄查询\n"); printf("请输入选项: "); printf("\n"); scanf("%d",&m); switch(m) { case1: charnum[10]; printf("请输入学号: \n"); scanf("%s",num); for(i=0;i { if(! strcmp(num,stu[i].no)) { if(strlen(stu[i].name)==4) { printf("%s%s%s%s%s\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].age,stu[i].note); } if(strlen(stu[i].name)==6) { printf("%s%s%s%s%s\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].age,stu[i].note); } flag=true; } } if(! flag) { printf("该学生不存在.\n"); } break; case2: printf("请输入姓名: \n"); charna[10];//定义一个姓名的数组 scanf("%s",na); for(i=0;i { if(! strcmp(na,stu[i].name)) { if(strlen(stu[i].name)==4) { printf("%s%s%s%s%s\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].age,stu[i].note); } if(strlen(stu[i].name)==6) { printf("%s%s%s%s%s\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].age,stu[i].note); } flag=true; } } if(! flag) { printf("该学生不存在.\n"); } break; case3: charch[5]; printf("请输入性别: \n"); scanf("%s",ch); for(i=0;i { if(! strcmp(ch,stu[i].sex)) { if(strlen(stu[i].name)==4) { printf("%s%s%s%s%s\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].age,stu[i].note); } if(strlen(stu[i].name)==6) { printf("%s%s%s%s%s\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].age,stu[i].note); } flag=true; } } if(! flag) { printf("t该学生不存在.\n"); } break; case4: charnum_age[5]; printf("请输入年龄: \n"); scanf("%s",&num_age); for(i=0;i { if(! strcmp(num_age,stu[i].age)) { if(strlen(stu[i].name)==4) { printf("%s%s%s%s%s\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].age,stu[i].note); } if(strlen(stu[i].name)==6) { printf("%s%s%s%s%s\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].age,stu[i].note); } flag=true; } } if(! flag) { printf("该学生不存在.\n"); } break; default: break; } } voidmodi()//信息修改函数 { FILE*fp;//定义修改密码文件的指针 FILE*fp1;//定义学生信息文件的指针 chara[7]; charb[7]; charc[10]; charch; inti=0; intf; booltemp=false; fp1=fopen("e: \\student.txt","r"); for(f=0;f { fscanf(fp1,"%s%s%s%s%s",stu[f].no,stu[f].name,stu[f].sex,stu[f].age,stu[f].note); } fclose(fp1); printf("请输入修改密码: \n"); scanf("%s",b); if((fp=fopen("e: \\1.txt","r"))==NULL) { printf("打开文件夹失败! "); exit(0); } ch=fgetc(fp); while(ch! =EOF&&i<6) { a[i]=ch; ch=fgetc(fp); i++; } a[6]='\0'; fclose(fp); while (1) { if(! strcmp(a,b)) { break; } else { printf("密码错误! 请重新输入密码: \n"); scanf("%s",b); } } printf("请输入需要修改信息学生的学号: \n"); scanf("%s",c); for(f=0;f { if(! strcmp(c,stu[f].no)) { printf("%s%s%s%s%s\n",stu[f].no,stu[f].name,stu[f].sex,stu[f].age,stu[f].note); printf("\n"); printf("请输入新的信息: \n"); printf("no: \n"); scanf("%s",stu[f].no); printf("name: \n"); scanf("%s",stu[f].name); printf("sex: \n"); scanf("%s",stu[f].sex); printf("age: \n"); scanf("%s",stu[f].age); printf("note: \n"); scanf("%s",stu[f].note); temp=true; break; } } if(! temp) { printf("该学生不存在! \n"); } } intsecretcode(charb[6])//密码验证函数 { FILE*fp; charc[7]; inti=0; charch; if((fp=fopen("e: \\2.txt","r"))==NULL) { printf("打开文件失败! \n"); exit(0); } ch=fgetc(fp); while(ch! =EOF&&i<6) { c[i]=ch; ch=fgetc(fp); i++; } c[6]='\0'; if(! strcmp(b,c))//判断字符串b和c是否相等,是返回值0,否返回值1 { return0; } else { return1; } fclose(fp); } voidread()//从文件中读取学生信息 { inti; FILE*fp; fp=fopen("e: \\student.txt","r"); for(i=0;i { fscanf(fp,"%s%s%s%s%s",stu[i].no,stu[i].name,stu[i].sex,stu[i].age,stu[i].note); if(strlen(stu[i].name)==4) { printf("%s%s%s%s%s\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].age,stu[i].note); } if(strlen(stu[i].name)==6) { printf("%s%s%s%s%s\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].age,stu[i].note); } } printf("\n"); printf("读取成功! \n"); fclose(fp); } main(intargc,char*argv[]) { chara[7]; charn; intcode; printf("请输入登陆密码: \n"); while (1) { scanf("%s",a); code=secretcode(a); if(code! =0) { printf("密码错误! "); printf("\n"); } else break; } printf("**************欢迎进入班级档案管理系统! ****************\n"); printf("\n\n"); menu(); while(scanf("%c",&n)! =EOF) { switch(n) { case'a': read(); menu();break; case'b': input(); menu();break; case'c': save(); menu();break; case
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 班级 档案管理系统