《2022年课程设计班级档案管理系统》由会员分享,可在线阅读,更多相关《2022年课程设计班级档案管理系统(29页珍藏版)》请在金锄头文库上搜索。
1、高级语言程序设计课 程 设 计 报 告 书题目:班级档案管理系统专业:电脑科学与技术学号:学生:指导教师:完成日期:精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 29 页目录一、设计内容与设计要求. 11.设计内容 . 12.设计要求 . 1二、程序设计目的. 2三、程序模块分析. 21.系统控制流程图. 22.部分主要函数算法流程图. 3四、函数功能说明. 61.函数说明 . 62.用户说明 . 6五、程序测试 . 7六、总结 . 14附录 . 15精选学习资料 - - - - - - - - - 名师归纳总结 - - - - -
2、- -第 2 页,共 29 页1 一、设计内容与设计要求对一个有 N个学生的班级,通过该系统实现对该班级学生的基本信息进行录入、显示、修改、删除、保存等操作的管理。1本系统采用一个包含N个数据的结构体数组,每个学生的数据应当包括:学号、性别、年龄、备注。2本系统显示这样的菜单:请选择系统功能项:a 从文件中读入学生基本信息b 添加新学生的基本信息c 学生基本信息显示d 学生基本信息保存至文件e 学生基本信息删除f 学生基本信息修改要求先输入修改密码g 学生基本信息查询(1) 按学号查询(2) 按查询(3) 按性别查询(4) 按年龄查询h 退出系统3执行一个具体的功能之后,程序将重新显示菜单。4
3、将学生基本信息保存到文件中。5进入系统之前要先输入登录密码。说明:登录密码和修改密码使用文件保存。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 29 页2 密码函数二、课程设计目的在平时学习C 语言的过程中,通常只是在课堂上跟随老师的讲解来进行学习,因此在练习上较为缺乏, 而课程设计恰恰弥补了这点,它不仅是对平时学习的一种检测, 同时在做它的过程中也对自己学习的知识进行了稳固和提高,为以后的学习和工作打下了基础。三、程序模块分析1.系统控制流程图开始读取学生信息功能添加学生信息功能保存信息功能信息删除功能信息修改功能信息查询功能退出功
4、能结束精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 29 页3 2.部分主要函数算法流程图:read 函数 :input 函数开始打开文件For 循环调用 fscanf函数从文件读取信息结束开始输入添加学生数for 循环输出添加学生信息结束精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 29 页4 :Delete 函数:modi 函数开始for循环调用strcmp 函数for循环调用fprintf函数结束查找失败开始打开文件密码函数结束密码错误输出信息输入学号输入新信息输入学号
5、精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 29 页5 开始调用 fscanf函数按学号查询按查询按性别查询按年龄查询for循环调用strcmp 函数结束:search 函数该学生是否存在是否输出信息精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 29 页6 四、函数功能说明1.函数说明main() 函数是程序的入口有调取各个模块的的作用,里面包含一个 switch 语句,实现选择功能;read() :读取函数,从文件中读取学生信息;input():添加函数,学生基本信息的录
6、入;save() :学生信息保存函数;Delete() :删除函数;search() :查找函数;modi() :信息修改函数;secretcode():密码验证函数;输入密码进入系统后,通过ag 选项来进行功能选择。选项 a:调用 read 函数,将在文件中保存的学生信息读入结构体数组中,然后在屏幕上显示出来,按enter 键便重新返回菜单;选项 b:调用 input函数,输入需要添加的学生人数,显示出需要添加的信息,将信息填写完毕后, 按 enter 键重新返回菜单, 再通过选项 c 将新添加的学生信息保存到文件中;选项 c: 调用 save 函数将新输入或修改后的学生信息保存到文件中,在
7、 input函数和 modi 函数调用之后需要调用此函数,然后按enter 键重新返回菜单;选项 d:通过调用 delete 函数,输入需要删除的学生的学号,按enter 键提示删除成功,该学生信息已被从文件中删除,并重新返回菜单;选项 e:在调用该函数实现学生信息修改的功能时,需要输入修改密码,当精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 29 页7 密码错误时,提示密码错误,此时重新输入密码。密码正确之后,输入需要修改信息的学生的学号, 输出该学生信息, 确认后输入新的学生信息, 按 enter 键重新返回菜单,此时需要通过选项
8、c 将信息保存到文件中;选项 f :通过调用 search 函数,在选择该项后,会出现一个子菜单,按照需求可以分别通过学号、 、性别和年龄来查询学生信息,按enter 键显示查询信息并重新返回菜单。五、程序测试输入登陆密码 123456 进入系统输入 a 从文件中读入学生信息精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 29 页8 输入 b 添加学生的基本信息精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 29 页9 输入 c 将信息保存至文件输入 d 删除学生信息精选学习资
9、料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 29 页10 信息删除成功再次从文件输入信息时需要删除的信息已被删除精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 29 页11 输入 e 进行学生信息修改精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 29 页12 输入 c 将信息保存到文件中输入 f 学生信息的查询精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 14 页,共 29
10、 页13 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 15 页,共 29 页14 六、总结这次的课程设计给了我很大的体会,我能独立的完成这项任务,是对平时的学习和练习的一种肯定,同时也提高了自己的信心。在完成它的过程中当然会遇到很多的困难,首先是结构体的定义问题,由于刚开始对程序的不熟悉, 在定义结构体内元素数组时出现了错误,后来经过一次次的检测将数组定义到了一个合适的大小。其次在 input 函数中,输入完新学生信息保存至文件中时, 对文件原有信息进行了覆盖,因此为了防止这种情况, 将for 循环中的 i 从 N-n 开始,经过测试这种方法是
11、有效的。最后是删除函数,由于开始定义的年龄是整型变量, 在对文件中的结构体数据进行删除时,在年龄的位置会出现数字 0,从而使从文件中读取数据时出现乱码,于是便将年龄定义成字符型数组,利用strcpy函数将结构体数组的下一位元素将前一位元素进行覆盖,从而实现删除功能。虽然较为成功的完成了课程设计,但由于知识和时间的局限性,系统仍然存在缺陷,我认为此系统还能通过链表来进行优化,链表的好处是可以通过指针更好的实现查找、 修改和删除功能, 因此如果有时间便会通过链表来时、使这个系统更加具有实用性。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 16 页,共
12、 29 页15 附录源程序清单#includestdafx.h #include stdio.h #include stdlib.h #include string.h #include conio.h #define N 4 struct student/定义一个包含学生信息的结构体数组 char no10;/学号char name8;/ char sex5;/性别char age5;/年龄char note5;/备注; struct student stuN;/定义全局变量void menu()/菜单函数 printf(n); printf( * * * * * * * * * * * *
13、 * * * * 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(请输入选项 :(
14、a g)n); void input()/学生基本信息的录入 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 17 页,共 29 页16 int i; int n; printf(请输入添加学生数: ); scanf(%d,&n); for(i=N-n;iN;i+) printf(请输入学生的基本信息 :n); printf(no:n); scanf(%s,stui.no); printf(name:n); scanf(%s,stui.name); printf(sex:n); scanf(%s,stui.sex); printf(age:n);
15、scanf(%s,stui.age); printf(note:n); scanf(%s,stui.note); printf(n); printf(请检查信息是否输入正确!n); printf(n); for(i=N-n;iN;i+) printf(%s %s %s %s %sn,stui.no,stui.name,stui.sex, stui.age,stui.note); void save() /学生信息保存 FILE * fp; int i; fp= fopen(e:student.txt,w); if (fp = NULL) printf(文件不存在 !n); exit(0); f
16、or(i=0;iN;i+)/在此处判断所占长度调整学生信息存入文件中的格式 if(strlen(stui.name)=4) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 18 页,共 29 页17 fprintf(fp,%s %s %s %s %sn,stui.no,stui.name,stui.sex, stui.age,stui.note); if(strlen(stui.name)=6) fprintf(fp,%s %s %s %s %sn,stui.no,stui.name,stui.sex, stui.age,stui.note); f
17、close(fp); fflush(fp); printf(保存成功! n); void Delete()/删除函数; FILE*fp; fp=fopen(e:student.txt,w); char number10; int f; bool flag=false; printf(删除学生信息 :n); printf(请输入学号 :n); scanf(%s,number); for (int i =0;iN;i+) if (!strcmp(number,stui.no) for(f=i;fN;f+)/调用 strcpy函数令数组中的下一位元素将上一位覆盖从而实现删除功能 strcpy(stu
18、f.name,stuf+1.name); strcpy(stuf.note,stuf+1.note); strcpy(stuf.no,stuf+1.no); strcpy(stuf.sex,stuf+1.sex); strcpy(stuf.age,stuf+1.age); flag=true; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 19 页,共 29 页18 if(!flag) printf(该学生不存在 !:n); Delete(); for(i=0;iN;i+) fprintf(fp,%s %s %s %s %sn,stui.no,s
19、tui.name,stui.sex, stui.age,stui.note); printf(删除成功! n); fclose(fp); void search()/查找函数 int f; FILE*fp; fp=fopen(e:student.txt,rb); for(f=0;fN;f+) fscanf(fp,%s%s%s%s%s,stuf.no,stuf.name,stuf.sex,stuf.age,stuf.note); bool flag=false;/定义一个 bool 类型进行判断 int m; int i; printf( 1 按学号查询 n); printf( 2 按查询 n)
20、; printf( 3 按性别查询 n); printf( 4 按年龄查询 n); printf(请输入选项: ); printf(n); scanf(%d,&m); switch(m) case 1: char num10; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 20 页,共 29 页19 printf(请输入学号 :n); scanf(%s,num); for ( i=0;iN;i+) if (!strcmp(num,stui.no) if(strlen(stui.name)=4) printf(%s %s %s %s %sn,stu
21、i.no,stui.name,stui.sex, stui.age,stui.note); if(strlen(stui.name)=6) printf(%s %s %s %s %sn,stui.no,stui.name,stui.sex, stui.age,stui.note); flag=true; if(!flag) printf(该学生不存在 .n); break; case 2: printf(请输入 :n); char na10;/定义一个的数组 scanf(%s,na); for ( i =0;iN;i+) if (!strcmp(na,stui.name) if(strlen(
22、stui.name)=4) printf(%s %s %s %s %sn,stui.no,stui.name,stui.sex, stui.age,stui.note); if(strlen(stui.name)=6) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 21 页,共 29 页20 printf(%s %s %s %s %sn,stui.no,stui.name,stui.sex, stui.age,stui.note); flag = true; if (!flag) printf(该学生不存在 .n); break; case 3:
23、 char ch5; printf(请输入性别 :n); scanf(%s,ch); for(i=0;iN;i+) if (!strcmp(ch,stui.sex) if(strlen(stui.name)=4) printf(%s %s %s %s %sn,stui.no,stui.name,stui.sex, stui.age,stui.note); if(strlen(stui.name)=6) printf(%s %s %s %s %sn,stui.no,stui.name,stui.sex, stui.age,stui.note); flag = true; if (!flag) p
24、rintf(t该学生不存在 .n); break; case 4: char num_age5; printf(请输入年龄 :n); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 22 页,共 29 页21 scanf(%s,&num_age); for ( i =0;iN;i+) if (!strcmp(num_age,stui.age) if(strlen(stui.name)=4) printf(%s %s %s %s %sn,stui.no,stui.name,stui.sex, stui.age,stui.note); if(strle
25、n(stui.name)=6) printf(%s %s %s %s %sn,stui.no,stui.name,stui.sex, stui.age,stui.note); flag = true; if (!flag) printf(该学生不存在 .n); break; default: break; void modi()/信息修改函数 FILE*fp;/定义修改密码文件的指针FILE*fp1;/定义学生信息文件的指针char a7; char b7; char c10; char ch; int i=0; int f; bool temp=false; 精选学习资料 - - - - -
26、 - - - - 名师归纳总结 - - - - - - -第 23 页,共 29 页22 fp1=fopen(e:student.txt,r); for(f=0;fN;f+)/从文件中将信息读到结构体中 fscanf(fp1,%s%s%s%s%s,stuf.no,stuf.name,stuf.sex,stuf.age,stuf.note); fclose(fp1); printf(请输入修改密码 :n); scanf(%s,b); if(fp=fopen(e:1.txt,r)=NULL) printf(打开文件夹失败! ); exit(0); ch=fgetc(fp); while(ch!=E
27、OF&i6) ai = ch; ch=fgetc(fp); i+; a6 = 0; fclose(fp); while(1) if (!strcmp(a,b) break; else printf(密码错误!请重新输入密码:n); scanf(%s,b); printf(请输入需要修改信息学生的学号:n); scanf(%s,c); for(f=0;fN;f+) if (!strcmp(c,stuf.no) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 24 页,共 29 页23 printf(%s %s %s %s %sn,stuf.no,st
28、uf.name,stuf.sex,stuf.age,stuf.note); printf(n); printf(请输入新的信息: n); printf(no:n); scanf(%s,stuf.no); printf(name:n); scanf(%s,stuf.name); printf(sex:n); scanf(%s,stuf.sex); printf(age:n); scanf(%s,stuf.age); printf(note:n); scanf(%s,stuf.note); temp=true; break; if(!temp) printf(该学生不存在! n); int sec
29、retcode(char b6)/密码验证函数 FILE*fp; char c7; int i=0; char ch; if (fp=fopen(e:2.txt,r)=NULL) printf(打开文件失败 !n); exit(0); ch=fgetc(fp); while (ch!=EOF&i6) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 25 页,共 29 页24 ci = ch; ch=fgetc(fp); i+; c6 = 0; if (!strcmp(b,c)/判断字符串 b 和 c 是否相等,是返回值0,否返回值1 return
30、0; else return 1; fclose(fp); void read()/从文件中读取学生信息 int i; FILE*fp; fp=fopen(e:student.txt,r); for(i=0;iN;i+) fscanf(fp,%s%s%s%s%s,stui.no,stui.name,stui.sex,stui.age,stui.note); if(strlen(stui.name)=4) printf(%s %s %s %s %sn,stui.no,stui.name,stui.sex, stui.age,stui.note); if(strlen(stui.name)=6)
31、printf(%s %s %s %s %sn,stui.no,stui.name,stui.sex, stui.age,stui.note); printf(n); printf(读取成功! n); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 26 页,共 29 页25 fclose(fp); main(int argc, char* argv) char a7; char n; int code; printf(请输入登陆密码: n); while(1) scanf(%s,a); code=secretcode(a); if(code!=0)
32、 printf(密码错误! ); printf(n); else break; printf(*欢 送 进 入 班 级 档 案 管 理 系 统 !*n); printf(nn); menu(); while(scanf(%c,&n)!=EOF) switch(n) case a: read(); menu();break; case b:input(); menu();break; case c:save(); menu();break; case d:Delete(); menu();break; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第
33、27 页,共 29 页26 case e:modi(); menu();break; case f:search(); menu();break; case g:exit(0); menu();break; return 0; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 28 页,共 29 页27 评分标准程序70题目难易程度10难 10在命题时有说明题目的难易程度易 0 分正确性 30完成要求功能且经教师测试无错误 30完成全部主要功能但对特殊测试样例有错误11-20完 成 一 些 功 能 但 有 错 误1-10不能运行 0答复下列问题情况20能答复出所有问题20能答复部分问题1-10一问三不知 -100注释丰富程度10较多 6-10主要的功能语句应该给出注释少许 0-5报告30层次、结构、逻辑性 10合理 5-10行文是否符合认知逻辑,各级标题的标号是否具有层次性等不甚合理 0-4语言表达能力10行文流畅且仅有不多于5 个错别字 5-10不太通顺且有多于5 个错别字 0-4版面 10版面整洁,布局合理5-10版面混乱, 布局不合理 0-4总分五级制成绩教 师 签 名:批 改 日 期:年月日精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 29 页,共 29 页