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

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

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

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

学生证管理系统课程设计报告.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〈stdio.h〉//I/O函数

#include〈stdlib。

h〉//标准库函数

#include〈string.h>//字符串函数

#include

h〉//字符操作函数

#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〈n;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〈n;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〈n;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〈n;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)//记录中的姓名和待比较的姓名是否相等

returni;//相等,则返回该记录的下标号,程序提前结束

}

returni;//返回i值

}

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

..。

.。

.。

.。

.。

.。

..。

.。

...。

.

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

inti;

for(i=0;i〈n;i++)//记录开始,直到最后一条

if(strcmp(s,t[i]。

classes)==0)//记录中的姓名和待比较的姓名是否相等

returni;//相等,则返回该记

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

当前位置:首页 > 初中教育 > 中考

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

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