您好,欢迎来到尚车旅游网。
搜索
您的当前位置:首页课程教学设计班级档案管理方案系统

课程教学设计班级档案管理方案系统

来源:尚车旅游网
.-

《高级语言程序设计》

课 程 设 计 报 告 书

题 目:专 业:学 号:学生姓名:指导教师:完成日期:

班级档案管理系统 计算机科学与技术

.-

目录

一、设计内容与设计要求 ............................................................................................................... 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.部分主要函数算法流程图

开始

打开文件 For循环 调用fscanf函数从 文件读取信息 结束

图4.1 :read函数

开始 输入添加学生数 for循环 输出添加学生信息 结束 4.2 :input函数 图 .-

开始 输入学号 for循环调用查 strcmp函数 找失 败 for循环 调用fprintf函数 结束

图4.3 :Delete函数

开始 打开文件 密码错误 密码函数 输入学号 输出信息 输入新信息 结束 图4.4 :modi函数 .-

按学号查询 按姓名查询 开始 调用fscanf函数 按性别查询 按年龄查询 该学生是否存在 是 for循环 调用strcmp函数 否

输出信息 结束 图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\" #define N 4

struct student//定义一个包含学生信息的结构体数组 {

char no[10];//学号 char name[8];//姓名 char sex[5];//性别 char age[5];//年龄 char note[5];//备注 };

struct student stu[N];//定义全局变量

void menu()//菜单函数 {

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\"); }

void input()//学生基本信息的录入 {

.-

int i; int n;

printf(\"请输入添加学生数:\"); scanf(\"%d\ for(i=N-n;iprintf(\"请输入学生的基本信息:\\n\"); printf(\"no:\\n\");

scanf(\"%s\ printf(\"name:\\n\");

scanf(\"%s\ printf(\"sex:\\n\");

scanf(\"%s\ printf(\"age:\\n\");

scanf(\"%s\ printf(\"note:\\n\");

scanf(\"%s\

}

printf(\"\\n\");

printf(\"请检查信息是否输入正确!\\n\"); printf(\"\\n\");

for(i=N-n;iprintf(\"%s %s %s %s %s\\n\x, stu[i].age,stu[i].note); } }

void save() //学生信息保存 {

FILE * fp; int i;

fp= fopen(\"e:\\\\student.txt\ 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\.sex, stu[i].age,stu[i].note); }

if(strlen(stu[i].name)==6) {

fprintf(fp,\"%s %s %s %s %s\\n\stu[i].age,stu[i].note); } }

fclose(fp); fflush(fp);

printf(\"保存成功!\\n\"); }

void Delete()//删除函数; {

FILE*fp;

fp=fopen(\"e:\\\\student.txt\ char number[10]; int f;

bool flag=false;

printf(\"删除学生信息:\\n\"); printf(\"请输入学号:\\n\"); scanf(\"%s\ for (int i =0;iif (!strcmp(number,stu[i].no)) {

for(f=i;fstrcpy(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;ifprintf(fp,\"%s %s %s %s %s\\n\stu[i].age,stu[i].note); }

printf(\"删除成功!\\n\"); fclose(fp); }

void search()//查找函数 {

int f; FILE*fp;

fp=fopen(\"e:\\\\student.txt\ for(f=0;ffscanf(fp,\"%s%s%s%s%s\e,stu[f].note); }

bool flag=false;//定义一个bool类型进行判断 int m; int i;

printf(\" 1 按学号查询\\n\"); printf(\" 2 按姓名查询\\n\"); printf(\" 3 按性别查询\\n\"); printf(\" 4 按年龄查询\\n\"); printf(\"请输入选项:\"); printf(\"\\n\"); scanf(\"%d\ switch(m) {

case 1:

.-

char num[10];

printf(\"请输入学号:\\n\"); scanf(\"%s\ for ( i=0;iif (!strcmp(num,stu[i].no)) {

if(strlen(stu[i].name)==4) {

printf(\"%s %s %s %s %s\\n\stu[i].age,stu[i].note); }

if(strlen(stu[i].name)==6) {

printf(\"%s %s %s %s %s\\n\stu[i].age,stu[i].note); }

flag=true; } }

if(!flag) {

printf(\"该学生不存在.\\n\"); }

break; case 2:

printf(\"请输入姓名:\\n\");

char na[10];//定义一个姓名的数组 scanf(\"%s\ for ( i =0;iif (!strcmp(na,stu[i].name)) {

if(strlen(stu[i].name)==4) {

printf(\"%s %s %s %s %s\\n\stu[i].age,stu[i].note); }

.-

if(strlen(stu[i].name)==6) {

printf(\"%s %s %s %s %s\\n\stu[i].age,stu[i].note); }

flag = true; } }

if (!flag) {

printf(\"该学生不存在.\\n\"); } break; case 3:

char ch[5];

printf(\"请输入性别:\\n\"); scanf(\"%s\ for(i=0;iif (!strcmp(ch,stu[i].sex)) {

if(strlen(stu[i].name)==4) {

printf(\"%s %s %s %s %s\\n\stu[i].age,stu[i].note); }

if(strlen(stu[i].name)==6) {

printf(\"%s %s %s %s %s\\n\stu[i].age,stu[i].note); }

flag = true; } }

if (!flag) {

printf(\"t该学生不存在.\\n\"); } break; case 4:

char num_age[5];

.-

printf(\"请输入年龄:\\n\"); scanf(\"%s\ for ( i =0;iif (!strcmp(num_age,stu[i].age)) {

if(strlen(stu[i].name)==4) {

printf(\"%s %s %s %s %s\\n\stu[i].age,stu[i].note); }

if(strlen(stu[i].name)==6) {

printf(\"%s %s %s %s %s\\n\stu[i].age,stu[i].note); }

flag = true; } }

if (!flag) {

printf(\"该学生不存在.\\n\"); } break; default: break; } }

void modi()//信息修改函数 {

FILE*fp;//定义修改密码文件的指针 FILE*fp1;//定义学生信息文件的指针 char a[7]; char b[7]; char c[10]; char ch; int i=0; int f;

.-

bool temp=false;

fp1=fopen(\"e:\\\\student.txt\

for(f=0;ffscanf(fp1,\"%s%s%s%s%s\ge,stu[f].note); }

fclose(fp1);

printf(\"请输入修改密码:\\n\"); scanf(\"%s\

if((fp=fopen(\"e:\\\\1.txt\ {

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\ } }

printf(\"请输入需要修改信息学生的学号:\\n\"); scanf(\"%s\ for(f=0;fif (!strcmp(c,stu[f].no)) {

.-

printf(\"%s %s %s %s %s\\n\].age,stu[f].note);

printf(\"\\n\");

printf(\"请输入新的信息:\\n\"); printf(\"no:\\n\");

scanf(\"%s\ printf(\"name:\\n\");

scanf(\"%s\ printf(\"sex:\\n\");

scanf(\"%s\ printf(\"age:\\n\");

scanf(\"%s\ printf(\"note:\\n\");

scanf(\"%s\ temp=true; break; } }

if(!temp) {

printf(\"该学生不存在!\\n\"); } }

int secretcode(char b[6])//密码验证函数 {

FILE*fp; char c[7]; int i=0; char ch;

if ((fp=fopen(\"e:\\\\2.txt\ {

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

{

return 0; } else {

return 1; }

fclose(fp); }

void read()//从文件中读取学生信息 {

int i; FILE*fp;

fp=fopen(\"e:\\\\student.txt\ for(i=0;ifscanf(fp,\"%s%s%s%s%s\e,stu[i].note); if(strlen(stu[i].name)==4) {

printf(\"%s %s %s %s %s\\n\stu[i].age,stu[i].note); }

if(strlen(stu[i].name)==6) {

printf(\"%s %s %s %s %s\\n\stu[i].age,stu[i].note); }

}

printf(\"\\n\");

.-

printf(\"读取成功!\\n\"); fclose(fp); }

main(int argc, char* argv[]) {

char a[7]; char n; int code;

printf(\"请输入登陆密码:\\n\");

while(1) {

scanf(\"%s\

code=secretcode(a); if(code!=0) {

printf(\"密码错误!\"); printf(\"\\n\"); } else break; }

printf(\"**************欢迎进入班级档案管理系统****************\\n\"); printf(\"\\n\\n\"); menu();

while(scanf(\"%c\ {

switch(n) {

case 'a': read();

menu();break; case 'b':input(); menu();break; case 'c':save(); menu();break; case 'd':Delete();

!.-

menu();break; case 'e':modi(); menu();break; case 'f':search(); menu();break; case 'g':exit(0); menu();break;

} }

return 0; }

.-

评分标准

题目难易程度(10) 难(10) 易(0分) 完成要求功能且经教师测试无错误(30) 正确性(30) 程 序 (70) 完成全部主要功能但对特殊测试样例有错误(11--20) 完成一些功能但有错误(1--10) 不能运行(0) 能回答出所有问题(20) 回答问题情况(20) 能回答部分问题(1-10) 一问三不知(-100) 注释丰富程度(10) 较多(6--10) 少许(0--5) 合理(5--10) 层次、结构、逻辑性(10) 报 告 (30) 不甚合理(0--4) 行文流畅且仅有不多于5个错别字(5--10) 不太通顺且有多于5个错别字(0--4) 版面整洁,布局合理(5--10) 版面混乱,布局不合理(0--4) 总分 主要的功能语句应该给出注释 行文是否符合认知逻辑,各级标题的标号是否具有层次性等 在命题时有说明题目的难易程度 语言表达能力(10) 版面(10) 五级制成绩

教 师 签 名:

批 改 日 期: 年 月 日

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sceh.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务