您的当前位置:首页正文

学生管理系统设计报告

来源:榕意旅游网
计算机科学与技术学院 程序设计基础课程设计报告

学 生 管 理 系 统

———学生成绩管理系统和

文件操作

学生姓名: 学 号: 20101201020 班 级:计算机科学与技术(师范) 指导老师: 韩 玲 日 期:2011/03/21--2011/04/03

一、设计目的与内容

(1)实验目的

 进一步巩固和复习C程序设计的基础知识。

 培养学生结构化程序、模块化程序设计的方法和能力。  提高学生调试程序的技巧和软件设计的能力。

淮北师范大学计算机学院C程序设计报告

 提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。  了解软件的编制过程。

(2)实验内容

1) 实现对学生信息的查找、添加、删除、修改、浏览、保存、从文件读取功能。 2) 使用结构体对学生信息的存储。

3) 使用链表实现对学生信息的查找、添加、删除、修改、浏览等操作。

4) 使用文件完成数据的存储与读取,要求每次运行某个模块时将数据读入结构体中,并 提供保存选项,将结构体中的数据保存在文件中。

(3)数据结构

1) 学生基本信息: typedef struct studentmessage

{ char name[20];

//姓名

char num[20]; //学号 char sex[5]; //性别 char collage[20]; //学院 char cla[20]; //班级

struct studentmessage *next; //定义链表 } STUMSG; 2) 学生成绩信息:

typedef struct studentscore { char name[10];

char num[20]; struct subject

{char subname[20]; float score;

}sub[5]; //保存学生各科成绩

double sum; //总分

struct studentscore *next; }STUCORE;

(4)本系统涉及的知识点

结构体、数组、循环、函数、指针、链表、文件操作。

实现的任务:

淮北师范大学计算机学院C程序设计报告

一.基本要求:

1) 实现对学生信息的查找、添加、删除、修改、浏览、保存、从文件读取功能。 2) 使用结构体对学生信息的存储。

3) 使用链表实现对学生信息的查找、添加、删除、修改、浏览等操作。

4) 使用文件完成数据的存储与读取,要求每次运行某个模块时将数据读入结构体中,并提供保存

选项,将结构体中的数据保存在文件中。

二、 功能模块及按姓名查找信息的流程图

学生管理系统 1.学生基本信息管理 2.学生成绩信息管理 3.文件操作 4.退出 学生基本信息管理 1. 查询信息 2. 添加信息 3. 删除信息 4. 修改信息 5. 返回 学生成绩信息管理 1. 查找成绩信息 2. 添加成绩信息 3. 删除成绩信息 4. 修改成绩信息 5. 返回 1. 文件操作 2. 从文件中读取信息 3. 学生信息存入文件 3. 返回 查找成绩信息 1. 按学号查找 2. 按姓名查找 3. 返回 添加成绩信息 删除成绩信息 修改成绩信息 查询信息 1.个人信息 1. 班级信息 2. 全部信息 添加学生基本信息 删除信息 1.删除个人信息 2.删除班级信息 3.删除全部信息 修改学生基本信息 从文件中读取信息 1.读取学生基本信息 2.读取学生成绩信息 学生信息存入文件 1.保存学生基本信息 2.保存学生成绩信息 淮北师范大学计算机学院C程序设计报告

开始 输入要查找姓名 i=0 与所有数据比较输入姓名

按姓名查找流程图

结束 输出查找人各项信息 查找的学生不存在 三、 功能说明 (1) 总体功能说明

本系统可以做到对1.学生信息:学号、姓名、性别、学院、班级。2.学生成绩信息:学号、姓名、一名学生五门不同学科的学科名及该科成绩。分别进行添加、修改、查找、删除、保存、载入功能。

(2) 学生成绩信息管理

可以添加学生学号、姓名、及对一名学生五门不同学科的学科名及该科成绩。并可以通过对输入的学生成绩信息进行修改、删除、保存、载入功能并通过学号和姓名两种方式查找,并且对同名的学生也可以进行区分。

(3) 学生成绩信息管理中各模块的功能说明程序代码设计

1.文件载入(void file3(void))

淮北师范大学计算机学院C程序设计报告

1)函数原形:void file3(void)

2)功 能:采用动态内存分配malloc函数和链表结构。建立打开“student.dat”文件保存数据。并建立头指针为head_2的单链表。

3)变量及类型:

STUCORE *stu,*p; 定义结构体指针 FILE *fp; 定义文件指针

4)说明:执行操作前一定要先执行void file3(void) 以通过动态内存分配建立打开“student.dat”文件保存数据。并建立头指针为head_2的单链表。

2.添加学生信息:(void add_score()) 1)函数原形:void add_score()

2)功 能:采用动态内存分配malloc函数和链表结构。利用do while、while循环结构依次输入学生学号、姓名、及对一名学生五门不同学科的学科名及该科成绩。将信息保存在内存中建立的链表里。

3)变量及类型:

STUCORE *stu,*p; 定义结构体指针

char k; 用来接收输入的(y/n)以便通过do while判断是否继续添加信息 p=head_2; 将结构体下定义的头指针head_2赋给p

4)说明:执行完输入函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。并在函数调用结束时利用system(\"cls\")执行清屏操作。添加完成后需要去往文件操作保存。

3. 删除学生信息(void del_score()) 1)函数原形:void del_score()

2)功 能:利用strcmp函数、do while、while循环结构通过学号找到要删除的学生并利用链表执行删除操作。将信息保存在内存中建立的链表里。

3)变量及类型:

STUCORE *p,*q; 定义结构体指针 char no[10]; 定义输入的待比较变量

char k,ch; 用来接收输入的(y/n)以便通过do while判断是否删除信息

p=head_2; 将结构体下定义的头指针head_2赋给p

4)说明:执行完删除函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。并在函数调用结束时利用system(\"cls\")执行清屏操作。删除完成后需要去往文件操作保存。

4. 修改学生信息(void modify_score())

淮北师范大学计算机学院C程序设计报告

1)函数原形:void modify_score()

2)功 能:利用strcmp函数、do while、while循环结构通过学号找到要修改的学生并利用链表执行修改操作。并将修改后的信息保存在内存中建立的链表里。

3)变量及类型:

STUCORE *p; 定义结构体指针 char no[10]; 定义输入的待比较变量

char k; 用来接收输入的(y/n)以便通过do while判断是否继续修改信息

p=head_2; 将结构体下定义的头指针head_2赋给p

4)说明:执行完修改函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。并在函数调用结束时利用system(\"cls\")执行清屏操作。修改完成后需要去往文件操作保存。

5.利用学号查找学生信息(void search_num()) 1)函数原形:void search_num()

2)功 能:利用strcmp函数、do while、while循环结构通过学号找到要查找的学生并将该学生成绩信息显示出来。

3)变量及类型:

STUCORE *p; 定义结构体指针 char no[10]; 定义输入的待比较变量

char k;用来接收输入的(y/n)以便通过do while判断是否继续利用学号查询信息

int flag; 定义一个整型变量来判断所查找的学生是否存在文件中 p=head_2; 将结构体下定义的头指针head_2赋给p

4)说明:执行完查询函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。并在函数调用结束时利用system(\"cls\")执行清屏操作。

6. 利用姓名查找学生信息(void search_name ()) 1)函数原形:void search_name()

2)功 能:利用strcmp函数、do while、while循环结构通过姓名找到要查找的学生并将该学生成绩信息显示出来。(包括同名的学生)

3)变量及类型:

STUCORE *p; 定义结构体指针 char no[10]; 定义输入的待比较变量

char k;用来接收输入的(y/n)以便通过do while判断是否继续利用姓名查询信息

int flag; 定义一个整型变量来判断所查找的学生是否存在文件中 p=head_2; 将结构体下定义的头指针head_2赋给p

淮北师范大学计算机学院C程序设计报告

4)说明:执行完查询函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。并在函数调用结束时利用system(\"cls\")执行清屏操作。

7.文件保存(void file4(void)) 1)函数原形:void file4(void)

2)功 能:将链表内存中的数据保存写入到“student.dat”文件中。 3)变量及类型:

STUCORE *stu,*p; 定义结构体指针 FILE *fp; 定义文件指针

4)说明:执行添加,删除,修改操作后一定要执行void file4(void) 以将链表内存中的数据保存写入到“student.dat”文件中。

8.

四、 程序设计总结 (1)程序调试情况

1.主程序界面

首先进入1.文件管理操作。建立单链表。

2.文件管理操作

选择读取的文件(第一次运行时因文件未建立只有在读取文件后才能执行保存文件)

淮北师范大学计算机学院C程序设计报告

读入文件后就可选择进入的系统。 选择2进入学生基本信息管理系统; 选择3进入学生成绩信息管理系统。

3.学生成绩信息管理

选择1:查询成绩信息。 选择2:添加成绩信息。 选择3:删除成绩信息。 选择4:修改成绩信息。 选择5:返回。

A. 查询成绩信息

选择1:按学号查询成绩信息。

淮北师范大学计算机学院C程序设计报告

选择2:按姓名查询成绩信息。

可以查找到同名学生的信息。

B. 添加成绩信息

淮北师范大学计算机学院C程序设计报告

如图添加学生成绩信息。继续添加输入y否则输入n。添加完成后请去往文件管理保存!

C. 删除成绩信息

如图删除学生基本信息。继续删除其它学生输入y否则输入n。删除完成后请去往文件管理保存!

D. 修改成绩信息

如图修改学生基本信息。继续修改其它学生输入y否则输入n。修改完成后请去往文件管理保存!

(2)个人感想

淮北师范大学计算机学院C程序设计报告

通过这次课程设计,我感觉到要真正做出一个程序并不很容易,但只要用心去做,总会有收获,特别是当我遇到 一个问题,想办法去解决,最后终于找到方法时,心里的那份喜悦之情真是难以形容。编写程序中遇到问题再所难免,应耐心探究其中的原因,从出现问题的地方起,并联系前后程序,仔细推敲,逐个排查。直到最终搞清为止。对于链表也有了更深层次的理解,尤其是采用动态内存分配malloc函数的使用。但我的程序仍让不够完美,因为我还不能对学号进行判断,就是说如果两个学生学号相同就一并保存下来。在查询中可以一并查询出来,但删除修改操作需要按录入顺序捉个操作。这是该程序的不足。

五、 结束语

(1)结束语

这次课程设计能够顺利完成要首先感谢韩玲老师对我的悉心教导,她在我整个编程中给予了我很大帮助。还感谢王保华老师为我解释了查询中链表的循环,陈美荣老师为我讲解了动态内存分配malloc函数。在此我要感谢所有为我的课程设计付出心血的老师们! (2)参考文献

谭浩强,《C程序设计(第二版)》,清华大学出版社。

严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。

六、 附录:源程序清单。

一:结构体:

typedef struct studentscore { char name[10]; char num[20];

struct subject {char subname[20]; float score;

}sub[5]; //保存学生各科成绩

double sum; //总分 struct studentscore *next; }STUCORE;

二:添加学生成绩信息函数:

淮北师范大学计算机学院C程序设计报告

void add_score()//添加学生成绩信息 {STUCORE *stu,*p;char k;p=head_2; do

{stu=( STUCORE *) malloc(sizeof(STUCORE)); printf(\"输入学生的成绩信息:\\n\");

printf(\"请输入学生学号:\");scanf(\"%s\printf(\"请输入学生姓名:\");scanf(\"%s\

printf(\"请输入第一门课学科名:\");scanf(\"%s\ printf(\"请输入该课成绩:\");scanf(\"%f\printf(\"请输入第二门课学科名:\");scanf(\"%s\printf(\"请输入该课成绩:\");scanf(\"%f\printf(\"请输入第三门课学科名:\");scanf(\"%s\printf(\"请输入该课成绩:\");scanf(\"%f\printf(\"请输入第四门课学科名:\");scanf(\"%s\printf(\"请输入该课成绩:\");scanf(\"%f\printf(\"请输入第五门课学科名:\");scanf(\"%s\printf(\"请输入该课成绩:\");scanf(\"%f\

stu->sum=stu->sub[1].score+stu->sub[2].score+stu->sub[3].score+stu->sub[4].score+stu->sub[0].score; getchar();printf(\"\\输入学生信息完成。\\n\"); while(p->next!=NULL)p=p->next; p->next=stu;p=stu;p->next=NULL;

printf(\"\\n添加完成后请去往文件管理保存!\\n\\n是否继续添加学生信息?(y/n):\\n\"); }while((k=getchar())=='y'); getchar(); system(\"cls\");}

三:删除学生成绩信息函数 void del_score()//删除学生成绩信息 { STUCORE *p,*q;char no[10];char k,ch; Do

{ p=head_2;printf(\"\\删除学生的详细资料 \\n\\n\\n\"); printf(\"请输入要删除学生的学号:\");scanf(\"%s\

while(strcmp(p->num,no)!=0&&p->next!=NULL) {q=p; p=p->next;} if(strcmp((p->num),no)==0) {printf(\"要删除的学生成绩信息:\");

printf(\"学号:%s\\n\姓名:%s\\n\

淮北师范大学计算机学院C程序设计报告

printf(\"%s 成绩: %f\\n\printf(\"%s 成绩: %f\\n\printf(\"%s 成绩: %f\\n\printf(\"%s 成绩: %f\\n\printf(\"%s 成绩: %f\\n\printf(\"总分:%lf\\n\

printf(\"\\n确定删除吗?y/n?\\n\\n\");ch=getchar();

if(ch=='y'){q->next=p->next;printf(\"\\n\\\已删除该学生\\n\\n\");}}

else printf(\"\\n\\\没有该学生\\n\\n\");getchar(); printf(\"\\n删除完成后请去往文件管理保存!\\n\\n是否继续删除其它学生信息?(y/n?):\\n\");k=getchar();}while(k=='y'); getchar();system(\"cls\");}

四:修改学生成绩信息函数

void modify_score()//修改学生成绩信息 {system(\"cls\");STUCORE *p;char no[30];char k; do

{p=head_2;printf(\"\\修改学生的详细资料\\n\"); printf(\"输入学生学号:\");scanf(\"%s\

while(strcmp(p->num,no)!=0&&p->next!=NULL){ p=p->next;} if(strcmp((p->num),no)==0)

{printf(\"要修改的学生的详细资料:\\n\");

printf(\"学号:%s\\n\姓名:%s\\n\printf(\"%s 成绩: %f\\n\printf(\"%s 成绩: %f\\n\printf(\"%s 成绩: %f\\n\printf(\"%s 成绩: %f\\n\printf(\"%s 成绩: %f\\n\printf(\"总分:%lf\\n\

printf(\"\\n\\********根据提示输入修改后的信息**********\\n\\n\"); printf(\"输入新的学生的成绩信息:\\n\");

printf(\"请输入新的学生学号:\");scanf(\"%s\printf(\"请输入新的学生姓名:\");scanf(\"%s\

printf(\"请输入第一门课学科名:\");scanf(\"%s\printf(\"请输入该课成绩:\");scanf(\"%f\printf(\"请输入第二门课学科名:\");scanf(\"%s\

淮北师范大学计算机学院C程序设计报告

printf(\"请输入该课成绩:\");scanf(\"%f\printf(\"请输入第三门课学科名:\");scanf(\"%s\printf(\"请输入该课成绩:\");scanf(\"%f\printf(\"请输入第四门课学科名:\");scanf(\"%s\printf(\"请输入该课成绩:\");scanf(\"%f\printf(\"请输入第五门课学科名:\");

scanf(\"%s\

printf(\"请输入该课成绩:\");scanf(\"%f\

stu->sum=stu->sub[1].score+stu->sub[2].score+stu->sub[3].score+stu->sub[4].score+stu->sub[0].score;} else

printf(\"\\没有此学生信息!\\n\\n\");

getchar();printf(\"\\n修改完成后请去往文件管理保存!\\n\\n是否继修改学生信息?(y/n):\\n\");k=getchar();}while(k=='y'); getchar();system(\"cls\");}

五:按学号查找学生成绩信息函数

void search_num()//按学号查找学生成绩信息 {STUCORE *p;char no[10];char k;int flag; do

{p=head_2;flag=0;printf(\"请输入要查找学生的学号:\");scanf(\"%s\while(p!=NULL)

if (strcmp(p->num,no)==0)

{printf(\"要查询的学生详细资料:\\n\");

printf(\"学号:%s\\n\姓名:%s\\n\printf(\"%s 成绩: %f\\n\printf(\"%s 成绩: %f\\n\printf(\"%s 成绩: %f\\n\printf(\"%s 成绩: %f\\n\printf(\"%s 成绩: %f\\n\printf(\"总分:%lf\\n\else p=p->next;

if(flag==0) printf(\"\\n\\\没有该学生\\n\\n\");getchar();printf(\"\\n是否继续查找其它学生信息?y/n?\\n\");k=getchar();}while(k=='y');

getchar();printf(\"\\n\\查看完毕!按任意键返回\");getchar();system(\"cls\");}

淮北师范大学计算机学院C程序设计报告

六:按姓名查找学生成绩函数

void search_name()//按姓名查找学生成绩 {STUCORE *p;char no[10];char k;int flag; do

{p=head_2;flag=0;printf(\"请输入要查找学生的姓名:\");scanf(\"%s\while(p!=NULL)

if (strcmp(p->name,no)==0)

{printf(\"要查询的学生详细资料:\\n\");

printf(\"学号:%s\\n\姓名:%s\\n\printf(\"%s 成绩: %f\\n\printf(\"%s 成绩: %f\\n\printf(\"%s 成绩: %f\\n\printf(\"%s 成绩: %f\\n\printf(\"%s 成绩: %f\\n\printf(\"总分:%lf\\n\else p=p->next;

if(flag==0) printf(\"\\n\\\没有该学生\\n\\n\");getchar();printf(\"\\n是否继续查找其它学生信息?y/n?\\n\");k=getchar();}while(k=='y');

getchar();printf(\"\\n\\查看完毕!按任意键返回\");getchar();system(\"cls\");}

七:查找学生成绩信息函数

void search_score()//查找学生成绩信息 {system(\"cls\");int a;

printf(\"\\**************************************\\n\"); printf(\"\\**************************************\\n\");

printf(\"\\\1:按学号查找。\\n\");printf(\"\\\2:按姓名查找。\\n\");printf(\"\\\3:退出。\\n\"); printf(\"\\**************************************\\n\"); printf(\"\\**************************************\\n\");

printf(\"\\n\\输入一个有效的数字,选择你要做的操作:\\n\");scanf(\"%d\switch(a)

{case 1:search_num();break;case 2:search_name();break;case 3:score();break; default:printf(\"\\\错误的菜单选项\\n\\n\");break;}}

八:学生成绩管理函数

淮北师范大学计算机学院C程序设计报告

void score()//学生成绩管理 {system(\"cls\");int a;

printf(\"\\*************学生管理系统**************\\n\"); printf(\"\\**************************************\\n\"); printf(\"\\\1:查找成绩信息。\\n\");printf(\"\\\2:添加成绩信息。\\n\"); printf(\"\\\3:删除成绩信息。\\n\");printf(\"\\\4:修改成绩信息。\\n\"); printf(\"\\\5:返回。\\n\");

printf(\"\\**************************************\\n\");

printf(\"\\**************************************\\n\");printf(\"\\n\\输入一个有效的数字,选择你要做的操作:\\n\");scanf(\"%d\switch(a)

{case 1:search_score();break;case 2:add_score();break; case 3:del_score();break;case 4:modify_score();break;

case 5:main();break;default:printf(\"\\\错误的菜单选项\\n\\n\");break;}}

九:文件载入函数 void file3(void)//文件载入

{STUCORE *stu,*p;FILE *fp;stu=( STUCORE *) malloc(sizeof(STUCORE)); if((fp=fopen(\"student.dat\

{printf(\"\\\暂无学生信息,请添加!\\n\\n\");head_2=stu;head_2->next=NULL;} else {head_2=p=stu; do

{if(fread(stu,sizeof(STUCORE),1,fp)==1)

{p->next=stu;p=p->next;stu=( STUCORE *) malloc(sizeof(STUCORE));} }while(!feof(fp));p->next=NULL;}}

十:文件保存写入函数 void file4(void) //文件保存写入 {STUCORE *p;FILE *fp;

if((fp=fopen(\"student.dat\ printf(\"\\\文件无法正常打开!\\n\\n\"); else {p=head_2; do

{fwrite(p,sizeof(STUCORE),1,fp);

p=p->next;}while(p!=NULL);}

淮北师范大学计算机学院C程序设计报告

fclose(fp);}

十一:文件管理 void file(void)//文件管理 {system(\"cls\");int a;

printf(\"\\*************文件管理*****************\\n\"); printf(\"\\**************************************\\n\");

printf(\"\\\1:读取学生信息文件。\\n\");printf(\"\\\2:学生信息文件保存。\\n\"); printf(\"\\\3:读取学生成绩文件。\\n\");printf(\"\\\4:学生信息文件保存。\\n\"); printf(\"\\\5:返回。\\n\");

printf(\"\\**************************************\\n\"); printf(\"\\**************************************\\n\");

printf(\"\\n\\输入一个有效的数字,选择你要做的操作:\\n\");scanf(\"%d\switch(a)

{case 1:file1();break;case 2:file2();break; case 3:file3();break;case 4:file4();break;

case 5:main();break;default:printf(\"\\错误的菜单选项\");break;}}

十二:主函数 void main()//主函数 {int a;

while(1)//无限循环

{printf(\"\\*************学生管理系统**************\\n\");

printf(\"\\\1:文件管理操作。\\n\");printf(\"\\\2:学生基本信息管理。\\n\"); printf(\"\\\3:学生成绩信息管理。\\n\");printf(\"\\\4:退出。\\n\"); printf(\"\\**************************************\\n\"); printf(\"\\n\\输入一个有效的数字,选择你要做的操作:\\n\"); switch(a)

{case 1:file();break;case 2:message();break;

case 3:score();break;case 4:printf(\"\\退出系统成功\\n\\n\");exit(0);break; default:printf(\"\\\错误的菜单选项\\n\\n\");break; }}

}

scanf(\"%d\

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