资源描述
洛 阳 理 工 学 院
课 程 设 计 报 告
课程名称 数据结构课程设计
设计题目 学生成绩管理系统
专 业 计算机科学与技术
课 程 设 计 任 务 书
设计题目: 学生成绩管理系统
设计内容与要求:
编写一个简单的学生信息管理程序,能实现对学生信息的简单管理。
建立一个4个学生的信息登记表,每个学生的信息包括:学号,姓名,和3门课程的成绩(FOX,C,ENGLISH)。
程序运行时显示一个简单的菜单,例如:
(1)信息输入(INPUT)
(2)总分统计(COUNT)
(3)总分排序(SORT)
(4)查询(QUERY)
其中:
(1)对4个学生的信息进行输入;
(2)对每个学生的3门课程统计总分;
(3)对4个学生的总分按降序排序并显示出来;
(4)查询输入一个学号后,显示出该学生的有关信息;
课 程 设 计 评 语
成绩:
指导教师:_______________
年 月 日
目 录
一.问题描述 2
二.基本要求 2
三.数据结构 2
四.总体设计 3
1.结构图 3
2.流程图 3
五. 详细设计 5
1.录入模块 5
2.浏览模块 5
3.排序模块 5
4.查找模块 5
六. 测试与调试 5
七. 源程序清单 9
一.问题描述
编写一个简单的学生信息管理程序,能实现对学生信息的简单管理。
二.基本要求
建立一个4个学生的信息登记表,每个学生的信息包括:学号,姓名,和3门课程的成绩(FOX,C,ENGLISH)。
程序运行时显示一个简单的菜单,例如:
(1)信息输入(INPUT)
(2)总分统计(COUNT)
(3)总分排序(SORT)
(4)查询(QUERY)
其中:
(1)对4个学生的信息进行输入;
(2)对每个学生的3门课程统计总分;
(3)对4个学生的总分按降序排序并显示出来;
(4)查询输入一个学号后,显示出该学生的有关信息;
三.数据结构
struct student
{
char num[10];/*学号*/
char name[20];/*姓名*/
int fgrade;/*佛学成绩*/
int cgrade;/*C语言成绩*/
int egrade;/*英语成绩*/
int total;/*总分*/
}st[100];
四.总体设计
学生信息管理系统
菜单选择
信息录入
信息浏览
信息排序
信息查询
按学号查询
按姓名查询
1.结构图
图4.1
2.流程图
2.1录入函数
开始
创建文件
输入信息
保存
关闭文件
返回菜单
图4.2
开始
输出排序结果
结束
创建数组排序
2.2 排序函数
图4.3
开始
输入查询方式
调用按学号查询函数
调用按姓名查询函数
返回菜单
2.3 查询函数
开始
输入要查找的学号
输出该学生的信息
结束
for循环
图4.4
2.4 按学号查询函数
图4.5
2.5 按姓名查询函数(同上)
五. 详细设计
1.录入模块
定义一个结构struct student和数组st[N]用来储存N个学生的所有信息(学号st[i].num、姓名st[i].name、佛学成绩st[i].fgrade、C语言成绩st[i].cgrade、英语成绩st[i].egrade)。通过for循环输入所有学生信息。用printf语句提示需要输入的内容,接着用scanf语句输入相应内容。输入完毕后套用保存函数save(m)将所输入的信息写入指定文件。
2.浏览模块
声明整形变量i和count,其中记录输出的学生序数,count用来接收调用浏览函数时所传递过来的实参,将其值传递给导出函数load(m),使得导出的学生人数与浏览的学生人数保持一致。通过调用load函数后(即给em数组赋值),用for循环输出每一个学生的各种信息。
3.排序模块
声明整形变量i,j和结构体变量struct student temp,用for循环实现排序功能,利用冒泡法,以st[i].total<st[j].total为条件进行排序。最后用printf输出排序结果。
4.查找模块
声明整型变量k,先用printf语句显示查询菜单,用scanf输入选择的查询方式的代号,用switch(k)进入所选择的具体查询函数,包括学号查询,姓名查询两种方式。
学号查询中,用scanf语句输入需要查询的学号,并赋值给num。用for循环,循环主体判断em[i].num中是否有输入的学号。如果有,用printf语句输出与学号相对应的该学生的所有信息,再跳出循环。按姓名查询与此方法类似,不再叙述。
六. 测试与调试
1. 运行程序,进入主菜单
图6.1 主菜单
2.输入数字“1”,创建学生信息
图6.2 输入职工信息
3.输入数字“2”,浏览学生信息
图6.3 浏览职工信息
4.输入数字“3”,按总分排序
图6.4 按总分排序
5.输入数字“4”,查询学生信息
5.1 选择查询方式“1”
图6.5 按学号查询
5.2 选择查询方式“2”
图6.6 按姓名查询
七. 源程序清单
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student
{
char num[10];/*学号*/
char name[20];/*姓名*/
int fgrade;/*佛学成绩*/
int cgrade;/*C语言成绩*/
int egrade;/*英语成绩*/
int total;/*总分*/
}st[100];
void menu();
void input();
void save(int m);
void save();
void display();
void search();
void search_num();
void search_name();
void sort_total();
int load();/*定义各函数*/
int m;
void main()
{
menu();
int n=0,flag;
char a;
do
{
printf("请选择你需要操作的步骤(1--4):\n");
scanf("%d",&n);
if(n>=0&&n<=4)
{
flag=1;
break;
}
else
{
flag=0;
printf("您输入有误,请重新选择!");
}
}
while(flag==0);
while(flag==1)
{
switch(n)
{
case 1:printf("\n ◆◆◆输入学生信息◆◆◆\n");printf("\n");input();break;
case 2:printf("\n ◆◆◆浏览学生信息◆◆◆\n");printf("\n");display();break;
case 3:printf("\n ◆◆◆按总分排序◆◆◆\n");printf("\n");sort_total();break;
case 4:printf("\n ◆◆◆查询学生信息◆◆◆\n");printf("\n");search();break;
case 0:exit(0);break;
default:break;
}
getchar();
printf("\n");
printf("是否继续运行(y or n):\n");
scanf("%c",&a);
if(a=='y')
{
flag=1;
system("cls"); /*清屏*/
menu(); /*调用菜单函数*/
printf("请再次选择你需要操作的步骤(1--4):\n");
scanf("%d",&n);
printf("\n");
}
else
exit(0);
}
}
void menu() /*菜单函数*/
{
printf(" **************欢迎进入学生信息管理系统**************\n");
printf(" 1.录入学生信息\n");
printf(" 2.浏览学生信息\n");
printf(" 3.按总分排序\n");
printf(" 4.查询学生信息\n");
printf(" 0.退出\n");
printf(" **********************谢谢使用**********************\n");
printf("\n");
printf("\n");
}
void input() /*输入学生信息并保存*/
{
int i;
printf("请输入需要创建信息的学生人数(1--10):\n");
scanf("%d",&m);
for(i=0;i<m;i++)
{
printf("请输入学号:");
scanf("%s",st[i].num);
printf("请输入姓名:");
scanf("%s",st[i].name);
printf("请输入佛学成绩:");
scanf("%d",&st[i].fgrade);
printf("请输入C语言成绩:");
scanf("%d",&st[i].cgrade);
printf("请输入英语成绩:");
scanf("%d",&st[i].egrade);
st[i].total=st[i].fgrade+st[i].cgrade+st[i].egrade;
/*信息输入已经完成*/
}
save(m);
return;/*返回主界面*/
}
void display()/*浏览学生信息*/
{
int i;
int count=0;
m=load();
printf("\n学号\t姓名\t佛学成绩\tC语言成绩\t英语成绩\t总分\n");/*输出学生信息*/
for(i=0;i<m+count;i++)
{
printf("\n%s\t%s\t%d\t\t%d\t\t%d\t\t%d\n",st[i].num,st[i].name,st[i].fgrade,st[i].cgrade,st[i].egrade,st[i].total);
}
}
void sort_total() /*按总分排序*/
{
int i,j;
struct student temp; /*声明结构体变量*/
printf("\t学号\t姓名\t佛学成绩\tC语言成绩\t英语成绩\t总分\n");
for(i=0;i<m;i++)/*对数据进行排序*/
{
for(j=i+1;j<m;j++)
if(st[i].total<st[j].total)
{
temp=st[i];
st[i]= st[j];
st[j]=temp;
}
printf("\n\t%s\t%s\t%d\t\t%d\t\t%d\t\t%d\n",st[i].num,st[i].name,st[i].fgrade,st[i].cgrade,st[i].egrade,st[i].total);
}
}
void search() /*查询函数*/
{
int k; /*定义局部变量*/
m=load();
printf("\n按学号查询请按1,\t按姓名查询请按2\n");
printf("\n请输入查询方式:");
scanf("%d",&k);
switch(k)/*查询方式的选择*/
{
case 1:search_num();break;/*按学号查询*/
case 2:search_name();break;/*按姓名查询*/
}
printf("\nPress any key to enter menu......");
getchar();
return; /*返回主界面*/
}
void search_num()/*(1)按学号查找*/
{
int i;
char temp[30];
printf("\n 请输入要查找的学号:");
scanf("%s",temp);
for( i=0;i<m;i++)
{
if(strcmp(temp,st[i].num)==0)
{
printf("\n学号\t姓名\t佛学成绩\tC语言成绩\t英语成绩\t总分\n");
printf("\n%s\t%s\t%d\t\t%d\t\t%d\t\t%d\n",st[i].num,st[i].name,st[i].fgrade,st[i].cgrade,st[i].egrade,st[i].total);
}
}
}
void search_name()/*(2)按姓名查找*/
{
int i;
char temp[30];
printf("\n 请输入要查找的姓名:");
scanf("%s",temp);
for( i=0;i<m;i++)
{
if(strcmp(temp,st[i].name)==0)
{
printf("\n学号\t姓名\t佛学成绩\tC语言成绩\t英语成绩\t总分\n");
printf("\n%s\t%s\t%d\t\t%d\t\t%d\t\t%d\n",st[i].num,st[i].name,st[i].fgrade,st[i].cgrade,st[i].egrade,st[i].total);
}
}
}
int load() /*导入函数*/
{
FILE*fp;
int n=0;
if((fp=fopen("student_list","rb"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
else
{
do
{
fread(&st[n],sizeof(struct student),1,fp);
n++;
}
while(feof(fp)==0);
}
fclose(fp);
return(n-1);
}
void save(int m)/*保存文件函数*/
{
int i;
FILE*fp;
if((fp=fopen("student_list","wb"))==NULL)/*创建文件并判断是否能打开*/
{
printf("cannot open file\n");
exit(0);
}
for(i=0;i<m;i++)/*将内存中学生的信息输出到磁盘文件中去*/
if(fwrite(&st[i],sizeof(struct student),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
THANKS !!!
致力为企业和个人提供合同协议,策划案计划书,学习课件等等
打造全网一站式需求
欢迎您的下载,资料仅供参考
展开阅读全文