学生学籍管理说明书.docx

上传人:b****2 文档编号:24390321 上传时间:2023-05-26 格式:DOCX 页数:31 大小:271.55KB
下载 相关 举报
学生学籍管理说明书.docx_第1页
第1页 / 共31页
学生学籍管理说明书.docx_第2页
第2页 / 共31页
学生学籍管理说明书.docx_第3页
第3页 / 共31页
学生学籍管理说明书.docx_第4页
第4页 / 共31页
学生学籍管理说明书.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

学生学籍管理说明书.docx

《学生学籍管理说明书.docx》由会员分享,可在线阅读,更多相关《学生学籍管理说明书.docx(31页珍藏版)》请在冰豆网上搜索。

学生学籍管理说明书.docx

学生学籍管理说明书

目录

摘要1

前言2

正文3

1.采用类c语言定义相关的数据类型3

2.各模块的伪码算法3

3.程序流程图5

4.调试分析6

5.测试结果7

6.源程序(带注释)9

总结26

参考文献27

致谢28

摘要

本设计---学生学籍信息管理系统是一项繁琐的业务,用计算机实现自动化管理既可以减轻人员的劳动强度,又可以提高学校管理效率。

此程序可以输入新的学生信息,输出所有学生的学号,姓名、性别、年龄、院系,专业,出生日期,籍贯等信息;修改学生信息内容;按号查找学生信息;增加新生的信息;退出学生信息管理系统。

通过此设计过程,可以加深理解线性表、查找表的逻辑结构、存储结构,掌握查找、排序等基本运算的实现。

 

关键词:

数据结构;线性表;学籍管理

 

前言

数据结构是一门专业技术基础课,它对学习者的的要求很明确:

学会分析、研究计算机加工的数据结构的特性,以便为应用设计所需的数据选择适当的逻辑结构、存储结构及其相应的算法,并初步掌握算法的时间分析和空间分析的技术。

其次,该课程的学习过程也是复杂程序设计的训练过程,要求学习者编写的程序结构或设计的程序结构体清楚、正确、易读,符合软件工程的规范。

其过程使用链表或顺序表实现数据的录入、浏览(对于学生记录的整体浏览和逐一浏览)、添加(可以添加任何符合记录格式的学生档案记录)、删除(可以删除数据库中任一条学生记录)、修改(可以修改其中的任一条学生数据内容)、查找(可以根据学生学号,查找某学生信息,也可以查找具有相同特征的学生的集合等功能;

本设计在WindowsXP操作系统环境下使用VisualC++6.0软件开发工具,采用目前最通用的程序设计语言之一——C语言作为数据结构和算法的描述语言。

通过该题目的设计过程,可以加深理解线性表、查找表的逻辑结构、存储结构,掌握查找、排序等基本运算的实现。

 

正文

1.采用类c语言定义相关的数据类型

学生学籍的记录项用结构体structstudent表示,包括10个属性,stunum、name、zhuanye、classes

、sex、birth、age、nation、add、depar分别代表学生的学号、姓名、院系、专业、年级、性别、出生日期、年龄、民族和籍贯。

#include"stdio.h"

#include"conio.h"

#include"stdlib.h"

#include"string.h"

#defineN1000//N为可输入的学生总人数,可根据需要更改

structstudent//定义学生信息结构体数组

structstudent//定义学生信息结构体数组

{

charnum[9];//学号

charname[20];//姓名

chardepar[15];//院系

charzhuanye[15];//专业

charclasses[5];//班级

charsex[4];//性别

charage[3];//年龄

charnation[5];//民族

charbirth[9];//出生日期

charadd[10];//籍贯

};

2.各模块的伪码算法

1)程序包含9个模块

(1)主程序模块

voidmenu(structstudentstu[N])

函数功能:

在屏幕上显示主菜单,接收用户选择并响应用户相应操作。

(2)创建并录入信息木模块

found(structstudentstu[])

printf("请输入要录入的学生的信息:

\n");

scanf("%s",stu[i].信息);

getch();

此部分创建学生(学号,姓名,性别,民族,出生日期,入学日期,院系,班级)等信息。

(3)修改学生信息模块

voidmodify(structstudentstu[],intsum)

用来修改学生的姓名,学号,性别,名族,入学日期,院系,班级,籍贯等信息.

(4)查询学生信息模块

voidseek(structstudentstu[],intsum)

可通过学号和姓名来查看学生的个人信息。

(5)删除某学生信息模块

del(structstudentstu[],intsum)

通过学生学号来删除学生信息。

(6)显示打印已有学生信息模块

voidshow(structstudentstu[],intsum)

显示学生已有信息(学号,姓名,性别,民族,出生日期,入学日期,院系,班级)。

(7)添加学生信息模块

insert(structstudentstu[],intsum)

先输入要添加的个数,然后依次添加学生学号,姓名,性别,民族,出生日期,入学日期,院系,班级信息。

(8)对学生信息排序模块

voidrank(structstudentstu[],intsum)

(9)对班级的学生人数进行统计模块

voidcount(structstudentstu[],intsum)

此模块通过统计学生人数的学院,专业,班级信息,输出符合相应信息的学生人数。

 

3.函数的调用关系图

4.调试分析

a、调试中遇到的问题及对问题的解决方法

此次课程设计所研究的问题不是很难,只有一个核心算法,即进行学生学籍查询,所以总的高度比较顺利。

但在最初的设计过程中犯了一个致命的错误,即没有很好的进行整体布局,也没有定义统一的函数接口,以致程序的结构与函数的混乱。

当各模块组合在一起的时候更是无没进行调试。

故只有一切从头开始,重新分配任务,以及统一定义各函数的接口。

在调试的过程中发现当输入错误的时会发生想不到的错误,为了避免这样意外的发生,写了一个判断函数judge()以及输入函数input()对其进行改进。

当一段相同的代码在程序中多次使用并且功能相对单一时,有必要将其写成一个函数,以减少工作量,并且使程序具有更好的可读性。

在编写程序的过程中,及时对重要和难懂的程序段写注释是一个很好的习惯,无论是以后的测试还是以后的维护都能够节省相当多的时间。

调试时最先进行各函数的调试,确保无误时再进行各模块的调试,最后才是将各模块组合在一起测试完整的程序。

在调试的过程中不断地进行改进、完善。

在序能够正确运行的基础上,再对各函数进行格式的优化,加强程序的结构性,并增强程序的可读性,包括给运行界面增加相应的操作提示等,使操作界面简单而又美观。

b、算法的时间复杂度和空间复杂度。

本次课设采用使用链表或顺序表实现数据的录入,浏览,添加,修改,删除,查找。

建立一个测试的数据表,至少要有20个测试数据,算法对于这些合法的输入数据都能产生满足规格说明要求。

若假设学生的人数为N,则:

空间复杂度为:

O(N)

时间复杂度最大为:

O(N²)

5.测试结果

该程序运行结果如下

图3功能选择

图4查询学生信息

查询学生信息可以按照学生的姓名和学号分别查询

图5修改学生信息

图5可以看出修改学生信息可以从姓名、年龄、出生日期、籍贯、院系、专业、班级、民族几个方面来分别进行修改,从而能够更好的来管理学生学籍变化情况。

图6显示学生信息

图6可以看出,该同学(dzf)男,19891213出生,汉族,来自甘肃省,所在院系为据算计,专业为信计2班。

6.源程序(带注释)

#include"stdio.h"

#include"conio.h"

#include"stdlib.h"

#include"string.h"

#defineN1000//N为可输入的学生总人数,可根据需要更改

structstudent//定义学生信息结构体数组

{

charnum[9];//学号

charname[20];//姓名

chardepar[15];//院系

charzhuanye[15];//专业

charclasses[5];//班级

charage[3];//年龄

charsex[4];//性别

charnation[5];//民族

charbirth[9];//出生日期

charadd[10];//籍贯

};

//从文件读入数据

intread_file(structstudentstu[])

{

FILE*sp;

inti=0;

system("cls");

if((sp=fopen("学生学籍管理系统__学生信息.txt","rt"))==NULL)//读文件,若文件不存在,则需要创建一个新的文件(文件创建在save_file函数中完成)

{

printf("\n学生学籍管理系统__学生信息文件不存在,请创建!

\n");

getch();

system("cls");

return0;

}

while((fread(&stu[i],sizeof(structstudent),1,sp))==1)//判断文件是否处在结束位置

{

if(stu[i].num==0)//若文件内容为空,则跳出循环

break;

else//若文件内容不为空,i自加1。

i++;//i为文件内结构体数组的数量

}

fclose(sp);

returni;//返回i值,代表文件中学生的人数

}

//保存学生信息(保存在文件中)

voidsave_file(structstudentstu[],intsum)

{

FILE*sp;

inti;

if((sp=fopen("学生学籍管理系统__学生信息.txt","wb"))==NULL)//若不存在此TXT文档,则创建;

{

printf("读文件错误!

\n");//创建不成功,返回menu函数;

return;

}

for(i=0;i

if(fwrite(&stu[i],sizeof(structstudent),1,sp)!

=1)//保存文件,sum为现有总学生人数,若未保存成功,提示"写文件错误!

";

printf("写文件错误!

\n");

fclose(sp);

return;

}

//创建并录入信息

intfound(structstudentstu[])

{

inti=0,x;

system("cls");

printf("请输入要录入的学生的个数:

\n");

scanf("%d",&x);

if(x==0)

return0;

do//输入信息

{

printf("\n请录入第%d个学生的信息:

\n",i+1);

printf("请录入学号:

");

scanf("%s",stu[i].num);

printf("\n请录入姓名:

");

scanf("%s",stu[i].name);

printf("\n请录入院系:

");

scanf("%s",stu[i].depar);

printf("\n请录入专业:

");

scanf("%s",stu[i].zhuanye);

printf("\n请录入班级:

");

scanf("%s",stu[i].classes);

printf("\n请录入性别:

");

scanf("%s",stu[i].sex);

printf("\n请录入年龄:

");

scanf("%s",stu[i].age);

printf("\n请录入出生日期(yyyymmdd):

");

scanf("%s",stu[i].birth);

printf("\n请录入民族:

");

scanf("%s",stu[i].nation);

printf("\n请录入籍贯:

");

scanf("%s",stu[i].add);

i++;

system("cls");

}while(i=x(用户要求创建学生的人数)时,跳出输入信息的for循环;

save_file(stu,x);//保存学生信息致文件

printf("录入完毕,请按任意键返回");

getch();

returni;//返回创建学生的人数

}

//修改学生信息

voidmodify(structstudentstu[],intsum)

{

inti,item,a=1;//i控制数组下标,item控制子菜单的选择

chars1[8];

FILE*sp;

system("cls");

do

{

printf("\n\n\n请输入你要修改的学号:

\n");

scanf("%s",s1);//要修改的学生学号

for(i=0;i

{

if(strcmp(stu[i].num,s1)==0)//若找到该生,输出该生的信息

{

printf("该学生学号:

%s\n",stu[i].num);

printf("该学生姓名:

%s\n",stu[i].name);

printf("该学生院系:

%s\n",stu[i].depar);

printf("该学生专业:

%s\n",stu[i].zhuanye);

printf("该学生班级:

%s\n",stu[i].classes);

printf("该学生性别:

%s\n",stu[i].sex);

printf("该学生年龄:

%s\n",stu[i].age);

printf("该学生出生日期:

%s\n",stu[i].birth);

printf("该学生民族:

%s\n",stu[i].nation);

printf("该学生籍贯:

%s\n",stu[i].add);

a=0;//找到该生,a=0;

break;//出for循环

}

}

if(a==1)//若没有找到该生,a=1,输出提示语句

printf("\n\n该学号不存在!

请重新输入学号:

\n");

}while(a);//当a=0,即没有找到该生,则继续循环重新输入学生学号

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

printf("\t你选择你要修改的选项:

\n");

printf("\t1.*修改姓名\n");

printf("\t2.*修改年龄\n");

printf("\t3.*修改性别\n");

printf("\t4.*修改出生日期\n");

printf("\t5.*修改籍贯\n");

printf("\t6.*修改院系名称\n");

printf("\t7.*修改专业名称\n");

printf("\t8.*修改班级\n");

printf("\t9.*修改民族\n");

printf("\t0.*退出菜单\n");

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

while

(1)

{

printf("\n\t请选择你要进行的操作:

");

scanf("%d",&item);///item控制子菜单的选择

switch(item)

{

case1:

//修改姓名

printf("\t请输入新的姓名:

");

scanf("%s",stu[i].name);

printf("\n\n\n修改成功!

\n");

save_file(stu,sum);

break;

case2:

//修改年龄

printf("\t请输入新的年龄:

");

scanf("%s",stu[i].age);

printf("\n\n\n修改成功!

\n");

save_file(stu,sum);

break;

case3:

//修改性别

printf("\t请输入新的性别:

");

scanf("%s",stu[i].sex);

printf("\n\n\n修改成功!

\n");

save_file(stu,sum);

break;

case4:

//修改出生日期

printf("\t请输入新的出生年月(yyyy.mm):

");

scanf("%s",stu[i].birth);

printf("\n\n\n修改成功!

\n");

save_file(stu,sum);

break;

case5:

//修改籍贯

printf("\t请输入新的籍贯:

");

scanf("%s",stu[i].add);

printf("\n\n\n修改成功!

\n");

save_file(stu,sum);

break;

case6:

//修改院系

printf("\t请输入新的院系:

");

scanf("%s",stu[i].depar);

printf("\n\n\n修改成功!

\n");

save_file(stu,sum);

break;

case7:

//修改专业

printf("\t请输入新的专业名称:

");

scanf("%s",stu[i].zhuanye);

printf("\n\n\n修改成功!

\n");

save_file(stu,sum);

break;

case8:

//修改班级

printf("\t请输入新的班级:

");

scanf("%s",stu[i].classes);

printf("\n\n\n修改成功!

\n");

save_file(stu,sum);

break;

case9:

//修改民族

printf("\t请输入新的民族名称:

");

scanf("%s",stu[i].nation);

printf("\n\n\n修改成功!

\n");

save_file(stu,sum);

break;

case0:

return;//不修改,退出

default:

printf("\t请在0到9之间选择:

");//若输入的值不在0~9,则提示

}

}

}

//查询学生信息

voidseek(structstudentstu[],intsum)

{

inti,item,flag;//i控制数组下标,item控制子菜单的选择,flag为判断条件

chars1[11];

system("cls");

while

(1)

{

system("cls");

printf("\n\n\t\t------------------\n");

printf("\t\t1.按学号查询\n");

printf("\t\t2.按姓名查询\n");

printf("\t\t3.退出本菜单\n");

printf("\t\t------------------\n");

printf("\t\t请选择子菜单编号:

");

scanf("%d",&item);//选择子菜单

flag=0;

switch(item)

{

case1:

//按学号进行查找

printf("\t\t请输入要查询的学生的学号:

");

scanf("%s",s1);

for(i=0;i

if(strcmp(stu[i].num,s1)==0)//判断学号是否存在

{//输出

flag=1;

printf("该学生学号:

%s\n",stu[i].num);

printf("该学生姓名:

%s\n",stu[i].name);

printf("该学生院系:

%s\n",stu[i].depar);

printf("该学生专业:

%s\n",stu[i].zhuanye);

printf("该学生班级:

%s\n",stu[i].classes);

printf("该学生性别:

%s\n",stu[i].sex);

printf("该学生年龄:

%s\n",stu[i].age);

printf("该学生出生日期:

%s\n",stu[i].birth);

printf("该学生民族:

%s\n",stu[i].nation);

printf("该学生籍贯:

%s\n",stu[i].add);

getch();

}

if(flag==0)//当上一个if条件不成立,flag=0,学生学号不存在,输出提示;

printf("\n\n\n\t\t该学号不存在!

\n");

getch();break;

case2:

//按姓名进行查找

printf("\n\n\t\t请输入要查询的学生的姓名:

");

scanf("%s",s1);

for(i=0;i

if(strcmp(stu[i].name,s1)==0)//判断姓名是否存在

{//输出

flag=1;

printf("该学生学号:

%s\n",stu[i].num);

printf("该学生姓名:

%s\n",stu[i].name);

printf("该学生院系:

%s\n",stu[i].depar);

printf("该学生专业:

%s\n",stu[i].zhuanye);

printf("该学生班级:

%s\n",stu[i].classes);

printf("该学生性别:

%s\n",stu[i].sex);

printf("该学生年龄:

%s\n",stu[i].age);

printf("该学生出生日期:

%s\n",stu[i].birth);

printf("该学生民族:

%s\n",stu[i].nation);

printf("该学生籍贯:

%s\n",stu[i].add);

getch();

}

if(flag==0)//当上一个if条件不成立,flag

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1