学生证管理系统课程设计报告.docx

上传人:b****1 文档编号:12739220 上传时间:2023-04-21 格式:DOCX 页数:27 大小:228.56KB
下载 相关 举报
学生证管理系统课程设计报告.docx_第1页
第1页 / 共27页
学生证管理系统课程设计报告.docx_第2页
第2页 / 共27页
学生证管理系统课程设计报告.docx_第3页
第3页 / 共27页
学生证管理系统课程设计报告.docx_第4页
第4页 / 共27页
学生证管理系统课程设计报告.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

学生证管理系统课程设计报告.docx

《学生证管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《学生证管理系统课程设计报告.docx(27页珍藏版)》请在冰豆网上搜索。

学生证管理系统课程设计报告.docx

学生证管理系统课程设计报告

C语言课程设计实验报告

课程设计题目:

学生证管理系统

姓名:

学号:

班级:

专业:

指导教师:

2014年1月2日

 

学生证管理系统课程设计报告

1.需求分析。

根据学生证管理的需要,建一个“学生证管理系统”,以方便对学生证信息的各项管理操作。

要求完成:

1.能对学生证信息进行录入和修改2.能按照学号和班级号显示学生证信息和更改、删除信息。

2.总体设计。

根据以上分析,本系统主要包括:

从键盘输入学生证信息、从指定的文件中读入学生证信息、按照学号和班号查询学生证信息、删除和修改学生证信息。

(1)主函数main():

定义学生结构体数组,输出操作对话框,调用录入、查询、删除、输出等函数对学生证信息进行处理。

(2)录入函数enter():

从键盘输入学生证信息。

(3)录入函数load():

从文件输入学生证信息。

(4)查询函数search():

按学号查找记录信息。

(5)查询函数display():

按班级查找记录信息。

(6)删除函数del():

删除指定学号的学生记录。

(7)修改函数modify():

按照指定学号修改记录。

程序功能机构图如下:

学生证管理系统

键盘输入

学号查询

文件输入

班级查询

删除记录

修改记录

 

 

3.详细设计。

本功能一共有16个函数,其中一个主函数,15个功能模块,每个功能模块都是由于主函数或其他功能模块调用,分别说明如下:

1.主函数main()。

 

Y

N

图1.2主程序流程图

(2)键盘输入函数。

键盘输入函数主要完成学生信息从屏幕输入数据,并将数据保存到文本文件中,以备后用。

流程图:

Y

N

(3)文件输入函数。

文件输入函数主要完成学生信息从文件中读入数据。

开始

打开文件

读入学生证信息

是否继续

关闭文件

结束

Y

N

图1.4文件输入流程图

(4)学号查询函数。

学号查询函数是完成由用户输入需要查询的学号,在现有学生信息中查询是否有此学生信息存在,查到输出学生全部信息,没查到则输出“此学生部存在”信息。

流程图如下:

开始

打开文件

读入学生证信息

输入查询学号

查到否

输出学生不存在信息

关闭文件

结束

输入查到学生信息

Y

N

图1.5学号查询流程图

(5)班级查询函数。

班级查询函数是完成由用户输入需要查询的班级,在现有学生信息中查询此班级的全部学生信息,查到输出全部信息,没差到则输出“此班级学生不存在”信息。

开始

打开文件

读入学生信息

输入查询班号

查到否?

输出此班级学生不存在信息

关闭文件

结束

输出查到学生信息

Y

N

(6)学号删除函数。

学号删除函数是完成由用户输入需要删除的学号,在现有学生信息中查询是否有该学生信息存在,查到则删除此学生全部信息,没查到则输出“此学生不存在”信息。

程序流程图如下:

开始

打开文件

读入学生信息

输入删除学号

找到否?

输入此学生不存在信息

关闭文件

结束

删除此学生信息

Y

N

(7)修改函数。

修改函数主要是完成根据学号查找到学生信息,输出学生信息,然后修改学生信息。

程序流程如下:

开始

打开文件

读入学生学号

输入修改学号

找到否?

输出此学生不存在信息

关闭文件

结束

修改此学生信息

Y

N

图1.7学号修改流程图

4.测试结果。

(1)程序运行主菜单

1.9主菜单界面

(2)从文件输入并显示结果

(3)按学号查找。

(4)修改测试。

(5)按班号浏览。

(6)统计班级的人数。

 

(7)删除功能测试。

5.软件操作使用说明书。

本软件采用命令行对话方式进行操作,运行后出现主界面如图1.9所示,然后按菜单提示操作即可。

6.总结。

通过本次课程设计练习,我们学会了科学分析问题解决问题的方法,从问题分析下手,然后进行模块设计,详细设计,再进行代码编写和测试。

在调试程序过程中,学会了分模块进行,避免了以前那种将程序全部功能都放在main()函数中完成的弊病,使得调试过程更加顺利。

另外通过本次练习,在前面学习过程中碰到的诸如结构体使用.指针使用.函数之间参数传递等难点问题也迎刃而解了。

源代码:

//student.h

#include//I/O函数

#include//标准库函数

#include//字符串函数

#include//字符操作函数

#defineM50//定义常数表示记录数

typedefstruct//定义数据结构

{

charno[20];//学号

charname[20];//姓名

charsex[5];//性别

charclasses[20];//班号

charsubject[20];//学院专业

}STUDENTS;

//以下是函数原型

#include"stufun.h"

//student.cpp

//菜单函数,函数返回值为整数,代表所选的菜单项................................

intmenu_select()

{

chars[80];

intc;

printf("******************************主菜单*********************\n");

printf("*0.输入学生证信息记录*\n");

printf("*1.浏览学生证信息记录*\n");

printf("*2.按学号查找*\n");

printf("*3.按学号删除*\n");

printf("*4.按学号修改*\n");

printf("*5.插入学生记录*\n");

printf("*6.保存记录到文件*\n");

printf("*7.加载文件到内存*\n");

printf("*8.按班号浏览*\n");

printf("*9.统计班级人数*\n");

printf("*10.程序退出*\n");

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

do

{

printf("\n输入您的菜单选项编号(0-10):

");//提示输入选项

scanf("%s",s);//输入选择项

c=atoi(s);//将输入的字符串转化为整型数

getchar();

}while(c<0||c>10);//选择项不在0~10之间重输

returnc;//返回选择项,主程序根据该数调用相应的函数

}

//输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度.......................

intenter(STUDENTSt[])

{

inti,n;

system("cls");

printf("\n请输入学生记录条数:

\n");

scanf("%d",&n);//输入记录数

printf("请输入学生记录:

\n");

printf("学号姓名性别班号学院专业\n");

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

for(i=0;i

{

scanf("%s",t[i].no);//输入学号

scanf("%s",t[i].name);//输入姓名

scanf("%s",t[i].sex);//输入性别

scanf("%s",t[i].classes);//输入班号

scanf("%s",t[i].subject);//学院专业

}

getchar();

returnn;//返回记录条数

}

//显示记录,参数为记录数组和记录条数.........................

voidlist(STUDENTSt[],intn)

{

inti;

system("cls");

printf("\n********************学生清单************************\n");

printf("学号姓名性别班号学院专业\n");

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

for(i=0;i

{

printf("%-20s%-20s%-10s%-10s%-10s\n",t[i].no,t[i].name,t[i].sex,t[i].classes,t[i].subject);

if((i+1)%10==0&&n%10>0)//判断输出是否达到10条记录

{

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

printf("每页显示10条学生记录,按回车键向后翻页...\n");

getchar();

system("cls");

printf("\n********************学生清单************************\n");

printf("学号姓名性别班号学院专业\n");

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

}

}

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

}

//查找记录..........................

voidsearch(STUDENTSt[],intn)

{

chars[20];//保存待查找学号字符串

inti;//保存查找到结点的序号

system("cls");

printf("请输入查找的学号:

\n");

scanf("%s",s);//输入待查找学号

getchar();

i=find_no(t,n,s);//调用find_no函数,得到一个整数

if(i>n-1)//如果整数i值大于n-1,说明没找到

printf("没有学号为%s的学生!

\n",s);

else

print(t[i]);//找到,调用显示函数显示记录

}

//删除函数,参数为记录数组和记录条数...........................

intdel(STUDENTSt[],intn)

{

chars[20];//要删除记录的学号

intch=0;

inti;

printf("请输入要删除的学生学号:

\n");

scanf("%s",s);//输入学号

getchar();

i=find_no(t,n,s);//调用find_no函数

if(i==n)

printf("没有找到学号为%s的学生!

\n",s);

else

{

printf("正在删除中!

\n");

for(;i

{

strcpy(t[i].name,t[i+1].name);

strcpy(t[i].no,t[i+1].no);

strcpy(t[i].sex,t[i+1].sex);

strcpy(t[i].classes,t[i+1].classes);

strcpy(t[i].subject,t[i+1].subject);

}

n--;//删除后记录数减1

printf("删除成功!

\n");

}

returnn;//返回记录数

}

//插入记录函数,参数为结构体数组和记录数.................................

intadd(STUDENTSt[],intn)

{

STUDENTStemp;//新插入记录信息

inti,j;

chars[20];//确定插入在哪个记录之前

printf("请输入要插入的学生记录:

\n");

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

printf("学号姓名性别班号学院专业\n");

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

scanf("%s%s%s%s%s",temp.no,temp.name,temp.sex,temp.classes,temp.subject);//输入插入信息

getchar();

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

if(n>0)

{

printf("请输入插入位置的姓名,将新记录插入在该名字前:

\n");

scanf("%s",s);//输入插入位置的姓名

getchar();

i=find_name(t,n,s);//调用find_name,确定插入位置

}

else

i=0;

for(j=n-1;j>=i;j--)//从最后一个结点开始向后移动一条

{

strcpy(t[j+1].no,t[j].no);//当前记录的学号拷贝到后一条

strcpy(t[j+1].name,t[j].name);//当前记录的姓名拷贝到后一条

strcpy(t[j+1].sex,t[j].sex);//当前记录的性别拷贝到后一条

strcpy(t[j+1].classes,t[j].classes);//当前记录的班号拷贝到后一条

strcpy(t[j+1].subject,t[j].subject);//当前记录的学院专业拷贝到后一条

}

strcpy(t[i].no,temp.no);//将新插入记录的学号拷贝到第i个位置

strcpy(t[i].name,temp.name);//将新插入记录的姓名拷贝到第i个位置

strcpy(t[i].sex,temp.sex);//将新插入记录的性别拷贝到第i个位置

strcpy(t[i].classes,temp.classes);

strcpy(t[i].subject,temp.subject);//将新插入记录的年龄拷贝到第i个位置

n++;//记录数加1

returnn;//返回记录数

}

//保存函数,参数为结构体数组和记录数..................................

voidsave(STUDENTSt[],intn)

{

inti;

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

if((fp=fopen("record.txt","wb"))==NULL)//打开文件,并判断打开是否正常

{

printf("无法打开学生记录文件!

\n");//打开失败

exit

(1);//退出

}

printf("\n正在保存中\n");

fprintf(fp,"%d",n);//将记录数写入文件

fprintf(fp,"\r\n");//将换行符号写入文件

for(i=0;i

{

fprintf(fp,"%-20s%-30s%-10s%-10s%-10s",t[i].no,t[i].name,t[i].sex,t[i].classes,t[i].subject);

//格式写入记录

fprintf(fp,"\r\n");//将换行符号写入文件

}

fclose(fp);//关闭文件

printf("****保存成功***\n");//显示保存成功

}

//读入函数,参数为结构体数组.............................

intload(STUDENTSt[])

{

inti,n;

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

if((fp=fopen("record.txt","rb"))==NULL)//打开文件

{

printf("无法打开学生记录文件!

\n");//打开失败

exit

(1);//退出

}

fscanf(fp,"%d",&n);//读入记录数

for(i=0;i

fscanf(fp,"%20s%30s%10s%10s%10s",t[i].no,t[i].name,t[i].sex,t[i].classes,t[i].subject);

//按格式读入记录

fclose(fp);//关闭文件

printf("已经成功加载学生记录文件到内存!

\n");//显示保存成功

returnn;//返回记录数

}

//按班号显示记录函数.................................

voiddisplay(STUDENTSt[],intn)

{

inti;

chars[20];

printf("请输入班号:

\n");

scanf("%s",s);//输入班号

getchar();

i=find_classes(t,n,s);

if(i>n-1)

printf("没有班号为%d的班级\n",s);

else

{

printf("\n********************学生清单************************\n");

printf("学号姓名性别班号学院专业\n");

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

for(i=0;i

{

if(strcmp(s,t[i].classes)==0)

{

printf("%-20s%-20s%-10s%-10s%-10s\n",t[i].no,t[i].name,t[i].sex,t[i].classes,t[i].subject);

}

}

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

}

}

//按班号统计人数........

voidclasscount(STUDENTSt[],intn)

{

inti;

chars[20];

printf("请输入班号:

\n");

scanf("%s",s);//输入班号

getchar();

i=find_classes(t,n,s);

if(i>n-1)

printf("没有班号为%d的班级\n",s);

else

{

intj=0;

for(i=0;i

if(strcmp(s,t[i].classes)==0)

j++;

printf("该班一共有%d人\n",j);

}

}

//显示指定的一条记录

voidprint(STUDENTStemp)

{

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

printf("学号姓名性别班号学院专业\n");

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

printf("%-20s%-20s%-10s%-10s%-10s\n",temp.no,temp.name,temp.sex,temp.classes,temp.subject);

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

}

//按姓名查找函数,参数为记录数组和记录条数以及姓名s...................................

intfind_name(STUDENTSt[],intn,char*s)

{

inti;

for(i=0;i

{

if(strcmp(s,t[i].name)==0)//记录中的姓名

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

当前位置:首页 > 医药卫生 > 基础医学

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

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