学生学籍管理系统

更新时间:2024-02-02 11:56:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

中北大学

课程设计说明书

学院、系: 专

软件学院 软件工程 学号: 学生学籍管理系统

学生姓名: 设计题目:

起迄日期: 2013年10月11日~2013年11月16日 指导教师:

日期: 2013年11月16日

一, 设计目的

编写学生学籍管理系统是为了学校更加高效,快捷,方便的管理学生信息,以及查询

学生学籍信息。

二, 任务概述

1.学生学籍管理系统:用数据文件存放学生的学籍,可对学生学籍进行注册,登录,修改,删除,查找,统计,学籍变化等操作。 功能要求:

(1) 系统以菜单方式工作。

(2) 登记学生的学号,姓名,性别,年龄,籍贯,系别,专业,班级;修改已知学号的

学生信息。

(3) 删除已知学号的学生信息。 (4) 查找已知学号的学生信息。 (5) 按学号,专业输出学生籍贯表。

(6) 查询学生学籍变化,比如入学,转专业,退学,降级,休学,毕业。

2.用一个结构体来表示学生学籍的各种信息,结构体如下:

struct stu_info /* 学生信息结构体 */ {

char school[30]; /* 记录学校名称 */ char classes[12]; /* 记录班级名称 */ int num; /* 记录学号 */ char name[10]; /* 记录姓名 */ char sex[4]; /* 记录性别 */ int age[4]; /*记录年龄*/

char address[30]; /* 记录家庭籍贯 */ char major[50]; /* 记录专业*/ char apartment[50]; /*记录院系*/

char state[4]; /*记录学生当前状态,比如入学,降级等*/ }stu[SIZE];

3.学籍变化用1表示入学,2表示退学,3表示降级,4表示休学,5表示毕业。 4.用数据文件存储信息,用函数fwrite()和fread()作为写入和读出文件信息。 5.信息的输入都从键盘输入,以菜单形式展开以实现其功能。 7.程序执行命令: (1)写入学生信息。 (2)保存学生信息。 (3)实现其他功能。

三, 模块划分

主函数 增加学生信息 删除学生信息 查询学生信息 修改学生信息 显示学生籍贯 更改学校名称 查看使用帮助 保存学生信息 按学号删除 全部删除 按学号查询 输出所有信息 按学号显示 按专业显示

四, 主要函数说明及N-S图

1.主要函数说明:

(1)主函数详细说明:

void main() /* 主函数 */ {

int menu_select; char exit_select; load(stu);

if(strlen(S_name)==0||strlen(C_name)==0) /* 判断是否为第一次使用 */ {

first(S_name,C_name); }

while(1) {

menu_select=-1; do {

printf(\

printf(\

printf(\

printf(\欢迎使用\\n\ printf(\功能列表:\

printf(\录入新的学生资料\ printf(\修改学生资料\ printf(\查找学生\

printf(\删除学生资料 ps:学生学习状态有(1):入学\ printf(\显示学生籍贯信息 (2):退学\ printf(\更改当前学校默认 printf(\查看使用帮助 printf(\退出学生学籍管理系统

printf(\当前学校默认名为:%s\\n\

printf(\请从0-7中选择:\ scanf(\ switch(menu_select) {

case 1:add(stu);break; case 2:change(stu);break; case 3:search(stu);break; case 4:del(stu);break; case 5:show(stu);break;

case 6:cschool(S_name);break; case 7:help();break; case 0:break;

default:printf(\输入错误!\\n\ }

}while(menu_select!=0);

if(menu_select==0) /* 判断是否要退出 */

{

printf(\确定要退出本系统?(Y/N):\ scanf(\

if(exit_select=='y'||exit_select=='Y') {

exit(0); } else {

continue; }

(3):降级\(4):休学\(5):毕业\ } }

}

(2)录入学生信息详细说明:

void add(struct stu_info stu[]) /* 录入学生信息模块 */ {

FILE *fp; int i; char k;

for(i=R;i

printf(\您现在要录入第%d个学生信息\\n\ strcpy(stu[i].school,S_name); strcpy(stu[i].classes,C_name); printf(\请输入学号:\ scanf(\ printf(\请输入姓名:\ scanf(\ printf(\请输入性别:\ scanf(\ printf(\请输入年龄:\ scanf(\ printf(\请输入专业:\ scanf(\ printf(\请输入籍贯:\ scanf(\ printf(\请输入班级:\ scanf(\ printf(\请输入院系:\ scanf(\ printf(\请输入学生状态:\ scanf(\ R=R+1;

printf(\是否继续??(y/n):\ scanf(\ if(k=='y'||k=='Y') {

continue;

printf(\ } else {

save(stu);

}

return; } } (3):删除学生信息详细说明:

void del(struct stu_info stu[]) /* 删除学生信息模块 */ {

int y=0,i,x,k,j; char ms;

printf(\选择删除\ printf(\全部删除\

printf(\请选择您要删除的方式(1-2):\ scanf(\ switch(x) {

case 1: printf(\请输入您要删除的学生的学号:\ scanf(\ for(i=0;i

if(stu[i].num==k) {

for(j=i;j

printf(\删除成功!\\n\\n\ y=1;

} }

system(\ if(y==0) {

printf(\找不到您要搜索的内容/n\ system(\ }

save(stu); break;

case 2: printf(\确定要清除全部数据(Y/N):\ scanf(\ if(ms=='y'||ms=='Y') {

printf(\正在清除全部数据...\

/* 选择删除 */ /* 全部删除 */ for(i=0;i

strcpy(stu[i].school,\ strcpy(stu[i].classes,\ stu[i].num=0;

strcpy(stu[i].name,\ strcpy(stu[i].sex,\ strcpy(stu[i].age,\ strcpy(stu[i].major,\ strcpy(stu[i].address,\ strcpy(stu[i].apartment,\ strcpy(stu[i].state,\ }

printf(\清除成功\ R=0; save(stu); } else {

return; }

break; } }

(4)查找学生信息详细说明:

void search(struct stu_info stu[]) /* 查找学生信息模块 */ {

int y=0,i,x,k;

printf(\选择查找\ printf(\显示全部\

printf(\请选择您要查询的方式(1-2):\ scanf(\ switch(x) {

case 1: printf(\请输入您要查找的学生的学号:\ scanf(\ for(i=0;i

if(stu[i].num==k&&stu[i].num!=0) { y=1;

printf(\

printf(\您要查询的是第%d个学生的信息,学号

/* 选择查找 */ 是:%d\\n\

printf(\学校名称:%s\ printf(\学号:%d\ printf(\班级:%s\ printf(\姓名:%s\ printf(\性别:%s\ printf(\年龄:%s\ printf(\专业:%s\ printf(\籍贯:%s\ printf(\院系:%s\ printf(\状态:%s\ } }

printf(\ if(y==0) {

printf(\找不到您要搜索的内容/n\ }

system(\ break;

case 2: printf(\以下是已录入的全部学生信息:/n\ for(i=0;i

printf(\ printf(\学校名称:%s\ printf(\学号:%d\ printf(\班级:%s\ printf(\姓名:%s\ printf(\性别:%s\ printf(\年龄:%s\ printf(\专业:%s\ printf(\籍贯:%s\ printf(\院系:%s\ printf(\状态:%s\ }

printf(\ system(\ break; } }

(5):修改学生信息详细说明:

void change(struct stu_info stu[]) /* 修改学生信息模块 */

/* 显示全部 */ {

int y=0; int x; int i;

printf(\请输入要修改的学生的学号:\ scanf(\ for(i=0;i

if(stu[i].num==x) {

printf(\您要修改的是第%d个学生的信息,学号是:%d\\n\ strcpy(stu[i].school,S_name); strcpy(stu[i].classes,C_name); printf(\请输入新学号:\ scanf(\ printf(\请输入新姓名:\ scanf(\ printf(\请输入新性别:\ scanf(\ printf(\请输入年龄:\ scanf(\

printf(\请输入新专业:\ scanf(\ printf(\请输入新籍贯:\ scanf(\ printf(\请输入新班级:\ scanf(\ printf(\请输入新院系:\ scanf(\ printf(\请输入学生状态:\ scanf(\

printf(\修改成功!\\n\\n\ y=1;

save(stu); } }

printf(\ if(y==0) {

printf(\找不到您要搜索的内容\\n\ system(\ return; } }

(6);显示学生籍贯信息详细说明: void show(struct stu_info stu[]) {

int y=0,i,x,k; char m;

printf(\按学号输出\ printf(\按专业输出\

printf(\请选择您要查询的方式(1-2):\ scanf(\ switch(x) {

case 1: printf(\请输入您要查找的学号:\ scanf(\ for(i=0;i

if(stu[i].num==k&&stu[i].num!=0) { y=1;

printf(\ printf(\学号:%d\ printf(\姓名:%s\

printf(\籍贯:%s\ } }

printf(\ if(y==0) {

printf(\找不到您要搜索的内容/n\ }

system(\ break; case 2: printf(\请输入您要查找的专业:\ scanf(\ for(i=0;i

if(stu[i].major==m&&stu[i].major!=0) { y=1;

printf(\ printf(\学号:%d\ printf(\姓名:%s\

printf(\籍贯:%s\

/* 选择查找 */

} }

printf(\

system(\ break;

system(\ break;} }

2.主要函数的N-S图说明:

(1);录入学生信息:

(2):删除学生信息:

(3)查找学生信息:

(4)修改学生信息:

(5)显示学生籍贯信息:

五.程序运行结数据与结果

第一次运行界面:

主界面:

录入学生信息:

修改学生信息:

查找学生信息:

删除学生信息:

显示学生籍贯信息:

查看使用帮助:

六, 课程设计心得:

这是我的第一次做课程设计,通过这次实践我更加了解了自己的知识缺陷,,也锻

炼自己,记得刚接触第一次接到课程设计的通知时,脑子里一片空白,一点眉目也没有,一度试着去逃避,也去试着去百度文库去找,可是找到的都是错误程序。于是去图书馆找资料,慢慢的有了自信心,于是自己开始慢慢写程序,先从小模块做起,最后把程序拼接了起来,通过一次一次的调试,功夫不负有心人,程序终于运行成功了,实现了所有的要求!

在编程的过程中,因为粗心,经常会在语句结束时少“;”或者把中文输入的引号输入文件,很难发现错误所在。在编程题时也出现了一些编译中的问题。例如,在开始未加头文件#include导致有许多未定义的errors;在输入字符串时用到“%S”,使功能无法输出。返回的数据类型与定义的不相符等问题。

在这次课程设计中我充分体会到C语言作为一门编程的基本语言它的精妙。通过这次课程设计使我了解到我有很多的不足,在程序调试的时候常常会因为几个错误而弄得心烦,这说明我对知识的掌握还不够牢,在程序设计的过程中也暴露出了我的诸多弊端,借这次课程设计的机会我会认真的加以改正,多多看书多去图书馆学习,同时应该增强自己的实践能力,耐心对待每一件事,为以后的学习打下坚实的基础。

附录:

#include #include #include

#define SIZE 99 /* 可以录入的最大学生人数 */ char S_name[30]; /* 记录当前学校名称 */

int R=0; /* 记录已有的学生信息数量 */ struct stu_info /* 学生信息结构体 */ {

char school[30]; /* 记录学校名称 */ char classes[12]; /* 记录班级名称 */ int num; /* 记录学号 */ char name[10]; /* 记录姓名 */ char sex[4]; /* 记录性别 */ int age[4]; /*记录年龄*/ char address[30]; /* 记录家庭籍贯 */ char major[31]; /* 记录专业*/ char apartment[50]; /*记录院系*/ char state[4]; /*记录学生当前状态*/ }stu[SIZE];

void first(char S_name[30]); /* 检测是否为第一次使用 */ void load(struct stu_info stu[]); /* 数据初始化 */ void add(struct stu_info stu[]); /* 录入学生信息 */ void change(struct stu_info stu[]); /* 修改学生信息 */ void search(struct stu_info stu[]); /* 查找学生信息 */ void del(struct stu_info stu[]); /* 删除学生信息 */

void cschool(char S_name[30]); /* 更改当前学校默认名 */ void help(); /* 查看使用帮助 */ void save(struct stu_info stu[]); /* 保存数据 */ void show(struct stu_info stu[]); /*显示学生信息*/

void main() /* 主函数 */ {

int menu_select; char exit_select; load(stu);

if(strlen(S_name)==0) /* 判断是否为第一次使用 */ {

first(S_name); }

while(1) {

menu_select=-1; do

{

printf(\ printf(\ 欢迎使用学生学籍管理系统\ printf(\

printf(\ 制作人:刘星李昕睿\ printf(\ 2013.11.12\ printf(\按回车键进入主菜单:\ getchar(); loop:

system(\ printf(\

printf(\ printf(\ printf(\欢迎使用\\n\ printf(\功能列表:\

printf(\录入新的学生资料\ printf(\修改学生资料\ printf(\查找学生\

printf(\删除学生资料 ps:学生学习状态有(1):

入学\ printf(\显示学生籍贯信息 (2):

退学\

printf(\更改当前学校默认名 (3):

降级\

printf(\查看使用帮助 (4):

休学\

printf(\退出学生学籍管理系统 (5):

毕业\

printf(\当前学校默认名为:%s\\n\

printf(\请从0-7中选择:\ scanf(\ switch(menu_select) {

case 1:add(stu);break; case 2:change(stu);break; case 3:search(stu);break; case 4:del(stu);break; case 5:show(stu);break;

case 6:cschool(S_name);break; case 7:help();break; case 0:break;

default:printf(\输入错误!\\n\ }

}while(menu_select!=0);

if(menu_select==0) /* 判断是

否要退出 */ {

printf(\确定要退出本系统?(Y/N):\ scanf(\

if(exit_select=='y'||exit_select=='Y') {

exit(0); } else {

continue; } } } }

void first(char S_name[30]) /* 检测是否为第一次使用 */ {

FILE *fp;

if(strlen(S_name)==0) {

printf(\当前学校名称为空,请输入一个学校名称:\ scanf(\

printf(\您设置的学校名称为:%s\\n\

if((fp=fopen(\ 录到save_school.rec中 */ {

printf(\记录学校名称文件打开错误。\\n\ return; }

printf(\开始记录学校名称...\\n\ rewind(fp);

fwrite(S_name,30,1,fp);

printf(\学校名称记录成功\\n\ fclose(fp);

/* 把当前学校名称记

}

system(\}

void load(struct stu_info stu[]) /* 数据初始化模块 */ {

int i;

FILE *fp; /* 指向文件指针 */

if((fp=fopen(\ /* 读取save_school.rec里存

储的学校名称 */ {

printf(\记录学校名称文件打开错误。\\n\ return; }

printf(\开始读取学校名称文件...\\n\ rewind(fp);

fread(S_name,sizeof(S_name),1,fp);

printf(\学校名称读取成功,当前学校名称为%s\\n\ fclose(fp);

if((fp=fopen(\ /* 读取save_stu.rec里存储

的学生信息 */ {

printf(\记录学生信息文件打开错误。\\n\ return; }

printf(\开始读取学生信息文件...\\n\ rewind(fp);

for(i=0;i

fread(&stu[i],sizeof(struct stu_info),1,fp); }

printf(\学生信息读取成功。\\n\

for(i=0;i

个学生信息 */ {

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

R=i;

system(\ return; } } }

void add(struct stu_info stu[]) /* 录入学生信息模块 */ {

FILE *fp; int i; char k;

for(i=R;i

printf(\您现在要录入第%d个学生信息\\n\ strcpy(stu[i].school,S_name); strcpy(stu[i].classes,C_name); printf(\请输入学号:\ scanf(\ printf(\请输入姓名:\ scanf(\ printf(\请输入性别:\ scanf(\ printf(\请输入年龄:\ scanf(\ printf(\请输入专业:\ scanf(\ printf(\请输入籍贯:\ scanf(\ printf(\请输入班级:\ scanf(\ printf(\请输入院系:\ scanf(\ printf(\请输入学生状态:\ scanf(\ R=R+1;

printf(\是否继续??(y/n):\ scanf(\ if(k=='y'||k=='Y') {

continue;

printf(\ } else {

save(stu); }

return; } }

void change(struct stu_info stu[]) /* 修改学生信息模块 */

{

int y=0; int x; int i;

printf(\请输入要修改的学生的学号:\ scanf(\ for(i=0;i

if(stu[i].num==x) {

printf(\您要修改的是第%d个学生的信息,学号是:%d\\n\ strcpy(stu[i].school,S_name); strcpy(stu[i].classes,C_name); printf(\请输入新学号:\ scanf(\ printf(\请输入新姓名:\ scanf(\ printf(\请输入新性别:\ scanf(\ printf(\请输入年龄:\ scanf(\ printf(\请输入新专业:\ scanf(\ printf(\请输入新籍贯:\ scanf(\ printf(\请输入新班级:\ scanf(\ printf(\请输入新院系:\ scanf(\ printf(\请输入学生状态:\ scanf(\

printf(\修改成功!\\n\\n\ y=1;

save(stu); } }

printf(\ if(y==0) {

printf(\找不到您要搜索的内容\\n\ system(\ return; } }

void search(struct stu_info stu[]) /* 查找学生信息模块 */ {

int y=0,i,x,k;

printf(\选择查找\ printf(\显示全部\

printf(\请选择您要查询的方式(1-2):\ scanf(\ switch(x) {

case 1: /* 选择查找 */ printf(\请输入您要查找的学生的学号:\ scanf(\ for(i=0;i

if(stu[i].num==k&&stu[i].num!=0) { y=1;

printf(\

printf(\您要查询的是第%d个学生的信息,学号是:%d\\n\ printf(\学校名称:%s\ printf(\学号:%d\ printf(\班级:%s\ printf(\姓名:%s\ printf(\性别:%s\ printf(\年龄:%s\ printf(\专业:%s\ printf(\籍贯:%s\ printf(\院系:%s\ printf(\状态:%s\ } }

printf(\ if(y==0) {

printf(\找不到您要搜索的内容/n\ }

system(\ break;

case 2: /* 显示全部 */ printf(\以下是已录入的全部学生信息:/n\ for(i=0;i

printf(\ printf(\学校名称:%s\

printf(\学号:%d\ printf(\班级:%s\ printf(\姓名:%s\ printf(\性别:%s\ printf(\年龄:%s\ printf(\专业:%s\ printf(\籍贯:%s\ printf(\院系:%s\ printf(\状态:%s\ }

printf(\ system(\ break; } }

void show(struct stu_info stu[]) {

int y=0,i,x,k; char m;

printf(\按学号输出\ printf(\按专业输出\

printf(\请选择您要查询的方式(1-2):\ scanf(\ switch(x) {

case 1: printf(\请输入您要查找的学生的学号:\ scanf(\ for(i=0;i

if(stu[i].num==k&&stu[i].num!=0) { y=1;

printf(\ printf(\学号:%d\ printf(\姓名:%s\

printf(\籍贯:%s\ } }

printf(\ if(y==0) {

printf(\找不到您要搜索的内容/n\ }

system(\

/* 选择查找 */

break; case 2: printf(\请输入您要查找的专业:\ scanf(\ for(i=0;i

if(stu[i].major==m&&stu[i].major!='\\0') { y=1;

printf(\ printf(\学号:%d\ printf(\姓名:%s\

printf(\籍贯:%s\ } }

printf(\

system(\ break;

system(\ break;} }

void del(struct stu_info stu[]) /* 删除学生信息模块 */ {

int y=0,i,x,k,j; char ms;

printf(\选择删除\ printf(\全部删除\

printf(\请选择您要删除的方式(1-2):\ scanf(\ switch(x) {

case 1: printf(\请输入您要删除的学生的学号:\ scanf(\ for(i=0;i

if(stu[i].num==k) {

for(j=i;j

/* 选择删除 */ stu[j]=stu[j+1]; R=R-1;

printf(\删除成功!\\n\\n\ y=1;

} }

system(\ if(y==0) {

printf(\找不到您要搜索的内容/n\ system(\ }

save(stu); break;

case 2: printf(\确定要清除全部数据(Y/N):\ scanf(\ if(ms=='y'||ms=='Y') {

printf(\正在清除全部数据...\ for(i=0;i

strcpy(stu[i].school,\ strcpy(stu[i].classes,\ stu[i].num=0;

strcpy(stu[i].name,\ strcpy(stu[i].sex,\ strcpy(stu[i].age,\ strcpy(stu[i].major,\ strcpy(stu[i].address,\ strcpy(stu[i].apartment,\ strcpy(stu[i].state,\ }

printf(\清除成功\ R=0; save(stu); } else {

return; }

break; }

/* 全部删除 */ }

void cschool(char S_name[30]) /* 更改当前学校默认名模块 */ {

FILE *fp;

printf(\请输入您要更改的学校默认名:\ scanf(\

if((fp=fopen(\ /* 把当前学校名称记录到

save_school.rec中 */ {

printf(\记录学校名称文件打开错误。\\n\ return; }

printf(\开始记录学校名称...\\n\ rewind(fp);

fwrite(S_name,30,1,fp);

printf(\学校名称记录成功\\n\ fclose(fp);

printf(\更改成功,当前学校默认名为:%s\\n\ system(\}

void help() /* 查看使用帮助模块 */ {

printf(\★本系统为即时保存,当您录入完后不需要再保存。\ printf(\★录入学生信息时,请按提示输入信息\

printf(\★修改学生信息时,请您输入您要修改的学生的学号,即可修改。\

printf(\★查询学生信息时,有两种查询方法,选择查询和全部显示,选择查询需要您

输入您要查找的学生的学号,全部显示则会把全部录入的学生信息显示出来。\ printf(\★删除学生信息时,可以选择按学号删除和清除全部学生信息。注意:清除全

部学生信息则会把全部信息都清除,且不能还原。\

printf(\★当您第一次使用时,请输入学校的默认名,已方便以后录入。\ printf(\★输入学生状态时,输入文本就好,简单明了\ printf(\★如要退出本系统,选择(0)即可。\ printf(\★由于系统编写仓促,可能会在运行中出现错误,希望能多多包涵,感谢您

的使用。\

printf(\ system(\}

void save(struct stu_info stu[]) /* 保存数据模块 */ {

FILE *fp; int i;

if((fp=fopen(\ /* 存储输入的学生信

息 */

{

printf(\记录学生信息文件打开错误。/n\ return; }

for(i=0;i

fwrite(&stu[i],sizeof(struct stu_info),1,fp); }

printf(\保存成功/n\ system(\}

本文来源:https://www.bwwdw.com/article/ib2w.html

Top