作业.docx

上传人:b****7 文档编号:11232699 上传时间:2023-02-26 格式:DOCX 页数:31 大小:92.58KB
下载 相关 举报
作业.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

作业

《C语言程序设计》

课程设计报告

课题:

班级成绩管理系统

 

系别:

计算机工程系

专业:

计算机网络

设计班级:

网12

学生:

赵青华

考号:

10503101250

指导教师:

赵耀军、杨新爱

二○一一年六月七日

实训课题:

班级成绩管理系统

(一)课程设计题目:

班级成绩管理系统

(二)目的与要求

1、目的:

(1)要求学生达到熟练掌握C++语言的基本知识和技能;

(2)基本掌握面向对象程序设计的基本思路和方法;

(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。

2、基本要求:

(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;

(2)要求在设计的过程中,建立清晰的类层次;

(3)在系统中至少要定义四个类,每个类中要有各自的属性和方法;

(4)在系统的设计中,至少要用到面向对象的一种机制。

3、创新要求:

在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。

4、写出设计说明书

(三)设计方法和基本原理

1.问题描述:

对一个有N个学生的班级,每个学生有M门课程。

该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。

.2.功能要求:

1、本系统采用一个结构体数组,每个数据的结构应当包括:

学号、姓名、M门课程名称。

2、本系统显示这样的菜单:

请选择系统功能项:

a、成绩录入

b、成绩显示

c、成绩保存

d、成绩排序

e、成绩修改(要求先输入密码)

f、成绩统计

(1)显示每门课程成绩最高的学生的基本信息

(2)显示每门课程的平均成绩

(3)显示超过某门课程平均成绩的学生人数

g、退出系统

3、执行一个具体的功能之后,程序将重新显示菜单。

4、将学生成绩保存到文件中。

(四)算法提示:

1、数据结构:

结构体类型数组。

2、数据库结构:

下表构成该系统的基本数据库。

姓名

学号

课程名称1

课程名称2

char

Char

float

float

(五)测试数据:

学生人数N=10

课程门数M=4

课程名:

数学、语文、英语、政治

1.概要分析:

班级成绩管理系统有13种功能。

把这13个功能做成13个子函数。

在主函当数中设计一个菜单对这13个子数进行管理。

来实现对整个系统的操作。

根据课题的要求。

每一个学生的包括姓名(char)、学号(char)、M门课程的成绩(float).再加上系统功能上的要求每一学生的信息还要总分和名次等。

所以自然的想到要用结构体来定义每一个学生的信息结构。

然后用链表把它们组成一个有序的整体。

用对链表的操作来实现对所有学生信息的统一管理(成绩显示、成绩排序、成绩修改等)。

最后为了以后按照处理后的顺序保存到文件中。

.各函数的功能:

概要设计:

程序的模块组成:

主函数:

intmain()

新建函数:

STUDENT*init()

输入函数:

STUDENT*create()

显示函数:

voidprint(STUDENT*head)

删除函数:

STUDENT*delete(STUDENT*head)

按名字寻找函数:

voidlookup(STUDENT*head)

保存函数:

voidsave(STUDENT*head)

按总分排序函数:

STUDENT*sort(STUDENT*head)

计算总分和均分函数:

voidcomputer(STUDENT*h)

修改函数:

STUDENT*Modify(STUDENT*head,STUDENT*new)

按学号排序函数:

STUDENT*index(STUDENT*h)

菜单函数:

intmenu_select()

各个函数的主要功能:

输入函数:

随时输入数据。

菜单函数:

显示系统主菜单。

显示函数:

显示所有学生的信息。

寻找函数:

方便学生查找自己的成绩。

删除函数:

删除某学生的信息。

排序函数:

按总成绩排序。

按学号排序函数:

按学号排序。

插入函数:

可以插入新的信息。

保存函数:

保存好学生成绩,以免丢失。

统计函数:

l显示每门课程成绩最高的学生的基本信息。

l显示每门课程的平均成绩。

l显示超过某门课程平均成绩的学生人数。

课题的功能模块的划分:

开始

菜单界面

功能选择

初始化函数

输入学生信息

删除学生信息

显示学生信息

查找学生信息

按成绩排序

保存到文件

从文件读数据

插入学生成绩

分类合计

退出系统

结束.

2.详细设计

整个系统除了主函数外,另外还有14个函数,实现八大功能:

输入功能、显示功能、查找功能、排序功能、插入功能、保存功能、读取功能。

各个函数的详细设计说明分别如下:

主函数main()

利用无限次循环for(;;)和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。

菜单选择函数intmenu_select()

这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择。

等执行完每一个函数功能后,返回菜单。

代码设计:

初始化函数STUDENT*init()

这是一个无参函数,里面只有两个语句,它的作用是使链表初始化,使head的值为NULL和一个清屏语句。

比如:

没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱码!

输入记录函数STUDENT*create()这是一个无参函数,用来执行学生成绩记录的输入,当学生为@时停止输入,函数结束后,带回一个链表头的指针指向一下个学生的信息插在表头。

N-S流程图如下:

head=NULL无条件循环

指针p指向新开辟的单元

指针p是否为空

是否

输入学号p->num

输出p->num是否为@

内存是否

溢出输入姓名p->name

停止for(i=0;i<3;i++)

输入输入成绩

返回p->sum=s;

菜单p->average=(float)s/3;

显示记录函数voidprint(STUDENT*head)

这是一个不返回值的有参函数,形参为“链表头的指针”,负责对全部学生成绩记录的输出,不足之处就是不能对学生成绩进行分页显示。

算法:

先将p结点的指针指向第一个结点,将p结点(即第一个结点)的数据输出。

然后再将p结点的指针指向p指针的的指针(即下一结点),将p结点(即第一结点)的数据输出。

重复执行此步聚直到p指针指向NULL为止。

N-S流程图如下:

p=head,使指向第一个结点

输出p所指向的结点

p指向一下个结点

当p指的不是表尾

处理流程

总体结构与模块外部设计

 

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

#include"windows.h"

#defineN50

voidme();

voidopen();

voidmenu();

voidwelcome();

voidzfpx(structstu*ps,intn);

voidcz(structstu*ps,intn);

voidxg(structstu*ps,intn);

voiddel(structstu*ps,intn);

voidscan(structstu*ps,intn);

voidxhpx(structstu*ps,intn);

voidprint(structstu*ps,intn);

floatsum(structstu*ps,intn,inti);

intnumber(structstu*ps,intn,charnu[]);

staticintmount=0;

structstu

{

charname[20];

charnum[20];

charsex[5];

intage;

floatscore[7];

floataver;

floatsum;

}temp;

voidmain()

{

welcome();

menu();

}

voidmenu()

{

system("cls");

open();

system("cls");

me();

}

voidme()

{

staticstructstust[N];

FILE*fp;

intselect,n;

printf("\n\t\t┏━━━━━━━━━━┓\n");

printf("\t\t┣━━学生管理系统━━┫");

printf("\n\t\t┗━━━━━━━━━━┛\n");

printf("\n\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━┓");

printf("\n\t\t┃¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤┃");

printf("\n\t\t┃¤¤¤┏━━━━━━━━━━┓¤¤¤┃");

printf("\n\t\t┃¤¤¤┃┏━━━━━━━━┓┃¤¤¤┃");

printf("\n\t\t┃¤¤¤┃┃⒈成绩初始化┃┃¤¤¤┃");

printf("\n\t\t┃¤¤¤┃┃⒉学生成绩排序┃┃¤¤¤┃");

printf("\n\t\t┃¤¤¤┃┃⒊查找学生成绩┃┃¤¤¤┃");

printf("\n\t\t┃¤¤¤┃┃⒋显示学生数据┃┃¤¤¤┃");

printf("\n\t\t┃¤¤¤┃┃⒌修改成绩┃┃¤¤¤┃");

printf("\n\t\t┃¤¤¤┃┃⒍删除学生信息┃┃¤¤¤┃");

printf("\n\t\t┃¤¤¤┃┃⒎保存数据┃┃¤¤¤┃");

printf("\n\t\t┃¤¤¤┃┃⒏清屏┃┃¤¤¤┃");

printf("\n\t\t┃¤¤¤┃┗━━━━━━━━┛┃¤¤¤┃");

printf("\n\t\t┃¤¤¤┗━━━━━━━━━━┛¤¤¤┃");

printf("\n\t\t┃¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤┃");

printf("\n\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━┛\n");

printf("\n\t\t请选择1~8(按其他键退出):

");

scanf("%d",&select);

if(select>=1&&select<=8)

{

switch(select)

{

case1:

scan(st,N);break;

case2:

loop:

printf("排序:

\n⑴.总分\n⑵.学号排序\n⑶.返回\n选择(0~3):

");

scanf("%d",&n);

switch(n)

{

case1:

zfpx(st,mount);

printf("\n*⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙按总分排序如下⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙*\n");

print(st,mount);

gotoloop;

break;

case2:

xhpx(st,mount);

printf("\n*⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙按学号排序如下⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙*\n");

print(st,mount);

gotoloop;

case3:

break;

}

break;

case3:

cz(st,mount);

break;

case4:

printf("\n*⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙学生成绩显示⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙*\n\n\n\n");

print(st,mount);

break;

case5:

xg(st,mount);

break;

case6:

del(st,mount);

break;

case7:

if((fp=fopen("d:

\\studentmanagement.txt","w"))==NULL)

{

printf("Cannotopenthefile\n");

}

else

{

fwrite(st,sizeof(st),1,fp);

fclose(fp);

}

printf("保存成功!

\n");

break;

case8:

system("cls");

default:

getchar();

}

me();

}

}

voidscan(structstu*ps,intn)

{

inti,k;

charboy[3]="b";

chargirl[3]="g";

for(i=mount;i

{

printf("请输入第%d个同学的姓名:

",i+1);

scanf("%s",(ps+i)->name);

printf("请输入学号学号:

");

getchar();

scanf("%s",(ps+i)->num);

while(number(ps,mount,(ps+i)->num))

{

getchar();

printf("学号已经存在\2\n请重新输入学号:

");

scanf("%s",(ps+i)->num);

}

printf("请输入性别borg:

");

sex:

scanf("%s",(ps+i)->sex);

if(strcmp((ps+i)->sex,girl)==0||strcmp((ps+i)->sex,boy)==0)

{

}

else

{

printf("输入有误\2请重新输入\n该同学性别:

");

gotosex;

}

printf("请输入年龄:

");

scanf("%d",&(ps+i)->age);

printf("请输入数学成绩0~100:

");

scanf("%f",&(ps+i)->score[0]);

while((ps+i)->score[0]>100||(ps+i)->score[0]<0)

{

getchar();

printf("输入有误\2请重新输入\n数学成绩:

");

scanf("%f",&(ps+i)->score[0]);

}

printf("请输入英语成绩0~100:

");

scanf("%f",&(ps+i)->score[1]);

while((ps+i)->score[1]>100||(ps+i)->score[1]<0)

{

getchar();

printf("输入有误\2请重新输入\n英语成绩:

");

scanf("%f",&(ps+i)->score[1]);

}

printf("请输入语文成绩0~100:

");

scanf("%f",&(ps+i)->score[2]);

while((ps+i)->score[2]>100||(ps+i)->score[2]<0)

{

getchar();

printf("输入有误\2请重新输入\n语文成绩:

");

scanf("%f",&(ps+i)->score[2]);

}

printf("请输入C语言成绩0~100:

");

scanf("%f",&(ps+i)->score[3]);

while((ps+i)->score[3]>100||(ps+i)->score[3]<0)

{

getchar();

printf("输入有误\2请重新输入\n数学成绩:

");

scanf("%f",&(ps+i)->score[3]);

}

printf("请输入数据库成绩0~100:

");

scanf("%f",&(ps+i)->score[4]);

while((ps+i)->score[4]>100||(ps+i)->score[4]<0)

{

getchar();

printf("输入有误\2请重新输入\n数学成绩:

");

scanf("%f",&(ps+i)->score[4]);

}

printf("请输入VISTA课程成绩0~100:

");

scanf("%f",&(ps+i)->score[5]);

while((ps+i)->score[5]>100||(ps+i)->score[5]<0)

{

getchar();

printf("输入有误\2请重新输入\n数学成绩:

");

scanf("%f",&(ps+i)->score[5]);

}

printf("请输入体育成绩0~100:

");

scanf("%f",&(ps+i)->score[6]);

while((ps+i)->score[6]>100||(ps+i)->score[6]<0)

{

getchar();

printf("输入有误\2请重新输入\n数学成绩:

");

scanf("%f",&(ps+i)->score[6]);

}

(ps+i)->sum=sum(ps,N,i);

(ps+i)->aver=(ps+i)->sum/7;

mount++;

printf("\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\n");

printf("继续输入请按1\n结束请按0\n1/0:

");

scanf("%d",&k);

if(k==1)

continue;

elseif(k==0)

printf("你总共输入了%d个学生成绩\n",mount);

break;

}

}

floatsum(structstu*ps,intn,inti)

{

intj;

floatsum=0;

for(j=0;j<7;j++)

{

sum+=(ps+i)->score[j];

}

returnsum;

}

voidzfpx(structstu*ps,intn)

{

inti,j;

for(i=1;i

{

for(j=0;j<=n-i-1;j++)

{

if((ps+i)->sum<(ps+i+1)->sum)

{

temp=ps[j];

ps[j]=ps[j+1];

ps[j+1]=temp;

}

}

}

}

voidprint(structstu*ps,intn)

{

inti;

intj;

printf("%3s%3s%3s%6s%6s%5s%5s%5s%6s%6s%7s%5s%5s%5s\n","名次","姓名","学号","boy/girl","年龄","数学","英语","语文","C语言","数据库","VISTA课程","体育","总成绩","平均分");

for(i=0;i

{

printf("%3d",i+1);

printf("%3s",(ps+i)->name);

printf("%3s",(ps+i)->num);

printf("%8s",(ps+i)->sex);

printf("%6d",(ps+i)->age);

for(j=0;j<7;j++)

{

printf("%6.1f",(ps+i)->score[j]);

}

printf("%5.1f",(ps+i)->sum);

printf("%5.1f",(ps+i)->aver);

printf("\n");

}

printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n");

}

voidcz(structstu*ps,intn)

{

inti,j;

inta;

charx[20];

charno[3]="e";

loop2:

printf("请输入要查找的学生学号(e为退出):

");

scanf("%s",x);

if((strcmp(x,no))==0)

{

me();

}

for(i=0;i

{

if(strcmp((ps+i)->num,x)==0)

{

printf("姓名学号性别年龄-数学-英语-语文-C语言-数据库-VISTA课程-体育-总成绩-平均分\n");

printf("%s",(ps+i)->name);

printf("%s",(ps+i)->num);

printf("%s",(ps+i)->sex);

printf("%d",(ps+i)->age);

for(j=0;j<7;j++)

{

printf("%.1f",(ps+i)->score[j]);

}

printf("%.1f",(ps+i)->sum);

printf("%.1f",(ps+i)->aver);

printf("\n");

printf("继续查找按1\n返回按0\n1/0:

");

scanf("%d",&a);

if(a==1)

gotoloop2;

else

me();

}

}

if(i==mount)

{

printf("没有该学号的学生!

\n继续查找按1\n返回按0\n1/0:

");

scanf("%d",&a);

if(a==1)

gotoloop2;

else

me();

}

}

voidxg(structstu*ps,intn)/*修改学生数据函数*/

{

inti,a,b;

charx[20],boy[3]="xy",girl[3]="xx";

charno[3]="e";

loop1:

printf("请输入要修改的学生学号(e为退出):

");

scanf("%s",x);

if((strcmp(x,no))==0)

{

me();

}

for(i=0;i

{

if(strcmp((ps+i)->num,x)==0)

{

loop:

printf("修改的信息:

\n1.数学2.英语3.语文4.C语言5.数据库6.VISTA课程7.体育8.姓名9.学号10.性别11.年龄\n\n\n\n:

");

scanf("%d",&a);

switch(a

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

当前位置:首页 > 经管营销 > 经济市场

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

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