当前位置:首页 » 考试成绩 » 学生成绩管理系统软件测试实验报告

学生成绩管理系统软件测试实验报告

发布时间: 2020-12-16 20:00:26

1. 求c++程序 学生成绩管理系统 详细的实验报告

#include<iostream>
#include<string>
#include <fstream>
#include<sstream>
#include<iomanip>
#include <stdlib.h>
using namespace std;
//结点类,用于存放学生的各种数据
class Node{
public:
int id;
//学号
string name;
//姓名
string grade;
//等级
double english;
//英语
double math;
//数学
double c;
//C++
double sum;
//总分
double average;
Node *next;
//指向下一结点的指针
Node(int nid=0,string nname="noname",
//构造函数,初始化变量
double e=0,double m=0,double cl=0,double s=0 ,double a=0,string g="ng");
};
Node::Node(int nid,string nname,double e,double m,double cl,double s,double a,string g)
{
id=nid;
name=nname;
next=NULL;
english=e;
math=m;c=cl;
sum=s;
average=a;
grade=g;
}
//class NOde结束//Link类,把数据以链表的形式存储,链表的每个结点为一个Node对象
class Link{
private:
Node *head;
//链表的头指针,为Node对象类型的指
public :
Link();//构造函数,初始化变量
bool linkIsEmpty();//判断链表是否为空
void linkInsert(Node *newnode);//向链表中插入新的结点
bool linkDelete(int nid);//从链表中删除的结点
void linkClear();//清空链表中数据
void linkView();//查看链表中数据
void linkGrade(Node *p1);//计算等级
void linkAverageTotle();//按平均分统计
Node* linkFind(int nid);//在链表中查找id为nid结点,返回指向该结点的指针
Node* getHead();//获取头指针
};
Link::Link()
{ //构造函数,初始化链表为空
head=NULL;
}
bool Link::linkIsEmpty()
{ //判断链表是否为空,空则返回
true; return(head==NULL);
}
void Link::linkInsert(Node *newnode)
{//按id值从小到大的顺序,插入新的结点
Node *p1;if(!head)//链表为空的情况
head=newnode;else if((head->id)>(newnode->id))
{//插入到第一个结点的情况
newnode->next=head;
head=newnode;
}
else
{//插入到第二个及以后情况
p1=head;
while(1)
{if(!(p1->next))
{p1->next=newnode;break;}
else if((p1->next)->id>newnode->id)
{newnode->next=p1->next;p1->next=newnode;break;}
p1=p1->next;}
}
}
bool
Link::linkDelete(int nid)
{//删除结点,成功则返回
true; Node *p;
if(head==NULL)
//链表为空的情况
return false;
if(head->id==nid)
{//删除的为第一个结点的情况
head=head->next;
return true;
}p=head;
while(p->next)
{//删除的为第二个及以后结点的情况
if((p->next)->id==nid)
{p->next=(p->next)->next;
return true;
}
p=p->next;
}
return false;
}
void Link::linkClear()
{//清空链表
head=NULL;
}
void Link::linkView()
{//显示链表数据
Node *p=head;
cout<<setw(10)<<"学号"<<setw(8)<<"姓名"<<setw(8)<<"英语"<<setw(8)<<"数学"<<setw(8)<<"C++"<<setw(8)<<"总分"<<setw(8)<<"平均分"<<setw(8)<<"等级"<<endl;while(p){ (p->sum)=(p->english)+(p->math)+(p->c);
//计算总分
(p->average)=((p->english)+(p->math)+(p->c))/3;
//计算平均成绩
linkGrade(p);
//计算等级
cout<<setw(10)<<p->id<<setw(8)<<p->name<<setw(8)<<p->english<<setw(8)<<p->math<<setw(8)<<p->c<<setw(8)<<p->sum<<setw(8)<<p->average<<setw(8)<<p->grade<<endl; p=p->next;}}void Link::linkGrade(Node *p1)
{
// 计算等级
while(p1){
if(p1->average>=90&&p1->average<=100)
p1->grade="优";
else if(p1->average>=80&&p1->average<90)
p1->grade="良好";
else if(p1->average>=70&&p1->average<80)
p1->grade="中等";
else if(p1->average>=60&&p1->average<=70)
p1->grade="合格";
else
p1->grade="不合格";p1=p1->next;
}
}
void Link::linkAverageTotle()
{//按学生平均分统计
int a=0,b=0,c=0,d=0,e=0,f=0;
double averagesum=0,asum=0,aaverage=0,paverage=0;
Node *p3=head;
while(p3)
{
if(p3->average>=90&&p3->average<=100) a+=1;
else if(p3->average>=80&&p3->average<90)b+=1;
else if(p3->average>=70&&p3->average<80) c+=1;
else if(p3->average>=60&&p3->average<70) d+=1;
else e+=1;
asum+=p3->sum;
aaverage+=p3->average;p3=p3->next;
}
f=a+b+c+d+e;
averagesum=asum/f;
paverage=aaverage/f;
cout<<"|-------------------------------------------------------|"<<endl;
cout<<"| 总 人 数:"<<f<<endl;
cout<<"|-------------------------------------------------------|"<<endl;
cout<<"| 优 人 数:"<<a<<" | "<<"优 秀 率: "<<a*100/f<<"%"<<endl;
cout<<"|-------------------------------------------------------|"<<endl;
cout<<"| 良 好 的人数:"<<b<<" | "<<"良 好 率: "<<b*100/f<<"%"<<endl;
cout<<"|-------------------------------------------------------|"<<endl;
cout<<"| 中 等 的人数:"<<c<<" | "<<"中 等 率: "<<c*100/f<<"%"<<endl;
cout<<"|-------------------------------------------------------|"<<endl;
cout<<"| 所有合格人数:"<<a+b+c+d<<" | "<<"合 格 率: "<<(a+b+c+d)*100/f<<"%"<<endl;
cout<<"|-------------------------------------------------------|"<<endl;
cout<<"| 不 合 格 数:"<<e<<" | "<<"不合格率: "<<e*100/f<<"%"<<endl;
cout<<"|-------------------------------------------------------|"<<endl;
cout<<"| 总分的平均分:"<<averagesum<<" | "<<"所有科目的平均分:"<<paverage<<endl;
cout<<"|-------------------------------------------------------|"<<endl;
}
Node* Link::linkFind(int nid)
{//查找id值为nid的结点,返回该结点的指针
Node *p=head;
//没找到符合条件的结点的话,返回的指针值为
NULL; while(p)
{if(p->id==nid)break;
else
p=p->next;
}return p;

}
Node* Link::getHead()
{return head;}
//class Link 结束
//类Student,用于包装Link类及菜单操作
class Student
{
private:
Link slink;
//Link对象成员
bool k;
//记录数据是否被修改
public:
Student();
void studentClear();
void studentInsert();
void studentDelete();
void studentFind();
void studentView();
void studentLoad();
void studentSave();
void studentAverageTotle();
//按平均分数统计等级
void Exit();
//退出程序
void showMenu();
//显示菜单
void showTip();
//显示操作提示
void doMenu(char n);
//执行相应菜单项功能
};
Student::Student()
{
Link();
//调用成员对象的构造函数
studentLoad();
//从文件中读取数据,创建链表
k=false;
//设置数据被修改
}
void Student::studentClear()
{
//清空学生记录
slink.linkClear();
cout<<"成功清空学生记录!"<<endl;
}
void Student::studentInsert()
{
//插入学生记录
Node *p=new Node();
cout<<"请输入学号:";
cin>>p->id;
cout<<"请输入姓名:";
cin>>p->name;
if(!slink.linkFind(p->id))
{
//判断学号是否存在
slink.linkInsert(p);
k=true;
}
else
cout<<"学号为"<<p->id<<"的学生已存在,插入失败!";
cout<<"请输入成绩:"<<endl;
cout<<"英语:"; cin>>p->english;
cout<<endl; cout<<"数学:";
cin>>p->math;
cout<<endl;
cout<<"C++:";
cin>>p->c;
cout<<endl;
(p->sum)=(p->english)+(p->math)+(p->c);
//计算总分
(p->average)=((p->english)+(p->math)+(p->c))/3;
//计算平均成绩
}
void Student::studentDelete()
{
//删除学生记录
int i;
if(slink.linkIsEmpty())
//链表为空的情况
cout<<"没有学生记录!"<<endl;
else{
cout<<"请输入学号:";
cin>>i;
if(slink.linkDelete(i))
{
cout<<"成功删除学号为"<<i<<"的学生记录!"<<endl;
k=true;
}
else
cout<<"没有找到学号为"<<i<<"的学生!"<<endl;
}
}
void Student::studentFind()
{
//查找某学号的学生记录
int n;
Node *p;if(slink.linkIsEmpty())
//链表为空的情况
cout<<"没有学生记录!"<<endl;
else{cout<<"请输入要查找的学号:";
cin>>n;p=slink.linkFind(n);
//获得找到的结点的指针
if(p)
{
//指针值不为NULL时
(p->sum)=(p->english)+(p->math)+(p->c);
//计算总分
(p->average)=((p->english)+(p->math)+(p->c))/3;
//计算平均成绩
slink.linkGrade(p);
cout<<setw(6)<<"学号"<<setw(8)<<"姓名"<<setw(8)<<"英语"<<setw(8)<<"数学"<<setw(8)<<"C++"<<setw(8)<<"总分"<<setw(8)<<"平均分"<<setw(8)<<"等级"<<endl;
cout<<setw(6)<<p->id<<setw(8)<<p->name<<setw(8)<<p->english<<setw(8)<<p->math<<setw(8)<<p->c<<setw(8)<<p->sum<<setw(8)<<p->average<<setw(8)<<p->grade<<endl;
}
else
//指针值为NULL时
cout<<"没有找到学号为"<<n<<"的学生记录!"<<endl;
}
}
void Student::studentView()
{
//显示所有学生的记录
if(slink.linkIsEmpty())
cout<<"没有学生记录!"<<endl;
else
slink.linkView();
}
void Student::studentLoad()
{//从文件中读入数据,创建链表
Node *p;int nid;
ifstream infile("data.txt");
if(!infile)cerr<<"错误:数据文件不能打开!\n";
else while(infile>>nid)
{
//读取学号,直到读空
p=new Node();
p->id=nid;
infile>>p->name>>p->english>>p->math>>p->c>>p->sum>>p->average>>p->grade;
//读取姓名
slink.linkInsert(p);
}
infile.close();
//关闭文件
}
void Student::studentSave()
{
//将数据保存到文件
Node *p=slink.getHead();
ofstream outfile("data.txt");
if(!outfile)cerr<<"错误:数据文件不能打开!\n";
else
{
while(p)
{
outfile<<p->id<<' '<<p->name<<' '<<p->english<<' '<<p->math<<' '<<p->c<<' '<<p->sum<<' '<<p->average<<' '<<p->grade<<endl;
p=p->next;
}
k=false;
cout<<"保存成功!"<<endl;
}
}
void Student::studentAverageTotle()
{
if(slink.linkIsEmpty());//执行语句;
else
slink.linkAverageTotle();
}
void Student::Exit()
{
char s='Y';
if(k){
//判断数据是否修改

cout<<"数据已经改变,是否保存?(y/n):";
cin>>s;if(s=='y'||s=='Y')studentSave();
}
cout<<"已安全退出,";
system("pause");
exit(0);
}
void Student::showMenu()
{
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 学生信息管理系统 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 1. 清空:清除所有学生数据 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 2. 添加:插入一条学生数据 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 3. 删除:删除指定学生数据 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 4. 查找:查找指定学生数据 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 5. 显示:显示所有学生数据 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 6. 保存:保存所有学生数据 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 7. 统计:按学生平均分统计 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 0. 退出:安全的退出本系统 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl<<endl;
}
void Student::showTip()
{
cout<<endl;
cout<<"-------------------操作完成---------------------"<<endl;
cout<<"-----------------选择0-7继续-------------------"<<endl;
cout<<"请选择:";
}
void Student::doMenu(char n)
{
switch(n)
{
case '1':studentClear();break;
case '2':studentInsert();break;
case '4':studentFind();break;
case '3':studentDelete();break;
case '5':studentView();break;
case '6':studentSave();break;
case '7':studentAverageTotle();break;
case '0':Exit();break;
default:cout<<"输入错误!";
}
}
int main()
{
Student s;
char i='9';
s.showMenu();
cout<<"选择对应数字进行操作:";
while(1)
{cin>>i;
system("cls");
//清除屏幕
s.showMenu();
s.doMenu(i);
s.showTip();
}
return 0;
}

希望能对你有帮助

2. 大一计算机实验报告学生成绩表的制作与管理

计算机基础实验报告填写内容


实验项目名称:指法练习


实验目的:1.认识微机主要部件;2.键盘分布及功能;3.键盘指法练习,汉字输入;


实验内容:1.观察计算机组成结构 ;2.开关计算机的正确方法;3.指法和指法基础键位练习


  1. 微机主要部件:

……………


2.系统启动和关闭过程:


·启动Windows


打开主机和显示器电源开关,屏幕显示启动过程中的画面(鼠标指针呈沙漏形状),屏幕上出现Windows的桌面, 且鼠标呈指针形状,表示系统启动完成。


·关闭Windows


单击屏幕左下角的开始,打开开始菜单,单击菜单中的关闭系统,打开关闭Windows对话框,选择关闭系统即可。


3. 键盘结构:


计算机键盘主要由主键盘区、小键盘区和功能键组构成。主键盘即通常的英文打字机用键(键盘中部);小键盘即数字键组(键盘右则与计算器类似);功能键组(键盘上部F1—F12)。…………


4.常用键的键名、键符及功能:


…………


5.正确的键盘操作方法


① 正确的姿式:


…………


② 正确的键入指法:


…………


6.指法练习操作:(提示:TT的进入,退出,选择,练习)


…………


7汉字输入方式:


…………


8.实验小结:


…………


实验项目名称:操作系统初步


实验目的:1.了解DOS及常用命令的使用;2. 熟悉WINDOWS操作系统界面;3.掌握WINDOWS相关基本操作。


实验内容:WINDOWS系统的基本操作和常用DOS命令的使用


(关键要写操作步骤 ,而不是罗列知识点)


一、WINDOWS系统的基本操作


  1. Windows 的桌面组成

桌面的基本元素,例如桌面图标、任务栏、开始按钮等,以及窗口的基本元素,例如:菜单、工具栏、标题、控制按钮等。……………


2. 鼠标的基本操作:


……………


3. Windows窗口的基本操作


(1) 窗口的移动


………..


(2) 改变窗口的大小


…………….


(3) 窗口的最小化、最大化、还原及关闭


……………………


4.Windows 的菜单操作


…………….


5. 启动程序的几种方法


…………….


6. 资源管理器的使用


1)查看盘中文件夹的分层结构


…………….


2)创建文件夹


……………


3)选定文件或文件夹


…………….


4)删除文件或文件夹


……………


5)复制文件或文件夹


……………


6)移动文件或文件夹


……………


7)更改文件或文件夹的名称


……………


7.“回收站”的使用


……………


二、常用DOS命令的使用


1.当前驱动器的选择


……………


2.COPY命令的使用


……………


3.REN命令的使用


……………


4.TYPE命令的使用


……………


5.DEL命令的使用


……………


6.DIR命令的使用


……………


7.MD命令的使用


……………


8. CD命令的使用


……………


9. RD命令 的使用


……………


10. XCOPY命令的使用?


……………


三.实验小结:


……………


实验项目名称:WORD


实验目的:1.熟悉WORD字处理界面; 2.WORD的编辑操作; 3. WORD的综合应用


实验内容:1. Word的基本操作 ;2. Word文档的排版和页面设置;3. 表格、图形的处理


(实验报告包含下面5大内容但不要原样照抄,写出操作步骤)


  1. Word的基本操作

1.Word 2000的启动和退出


2.创建一个新文档?


3.打开并编辑一个已有的Word文档?


4.字符和汉字的输入?


5.文档的编辑?


(1)建立一个新文档?


(2)插入文字


(3)插入符号和特殊字符?


(4)选择和删除文本?


(5)改写文本?


(6)查找与替换?


(7)复制文本?


(8)移动文本?


6.检查和更正拼写及语法错误?


(1)输入时自动检查拼写和语法错误?


(2)更正拼写和语法错误?


2.Word文档的排版和页面设置


1.字符格式的设置?


(1)设置或改变字符的字体 ?


(2)设置或改变字号?


(3)设置不同的字形?


(4)更改字符的颜色


2.段落格式的设置?


(1)设置段落缩进量?


(2)调整段落间距?


(3)更改文本对齐方式?


3.添加和修改边框及底纹?


4.页面编排以及页面设置的基本方法?


(1)创建页眉或页脚


(2)删除页眉或页脚


(3)添加、移动或删除分页符


(4)设置页码


(5)为Word文档添加背景色或纹理


(6)插入分节符


(7)改变分节符类型


(8)更改文字的垂直对齐方式


(9)分栏


(10)页面设置?


5.Word文档的保护、格式转换以及文件查找方法


(1)使用文档的保护


(2)格式转换


(3)文件的查找方法


3.表格的处理


1.表格的创建和删除?


(1)表格的创建?


① 规则表格的创建?


② 复杂表格的创建?


(2)表格的删除?


(3)文本与表格之间的转换


2.表格的修改?


(1)插入和删除行或列?


(2)插入和删除单元格


(3)表格属性


(4)合并单元格


(5)拆分单元格


3.表格格式的设置


(1)自动设置表格格式


(2)给表格、段落或选定的文本添加边框


(3)改变表格单元格中文本的垂直对齐方式


4.利用公式进行表格的计算


(1)计算行或列数值的总和


(2)按表格中的公式进行计算


5.表格的排序


6.添加或修改底纹或填充色?


? (1)为表格添加底纹


(2)修改表格的底纹


(3)取消表格或文本的底纹


4.图形的处理


1.添加图形对象、改变图形对象的大小以及删除图形对象


(1)添加图形对象


① 添加自选图形


② 将文字插入到自选图形中


③ 添加曲线


④ 添加或取消箭头


⑤ 增加特殊文字效果


(2)改变图形对象的大小


① 调整图形对象的大小


② 按指定比例调整图形对象的大小


(3)删除图形对象


2.图形的插入、编辑和处理方法


(1)图形的插入


(2)编辑图片


3.文本框和图文框的使用


(1)文本框与图文框


(2)插入文本框


(3)设置文本框的大小


(4)使文字环绕文本框或图形对象

3. 实验一 学生成绩管理系统

我这里有个现成的,你改改就好了

4. 求高手给一份有关学生成绩管理系统的软件测试的报告

TestCenter是一款功能强大的测试管理工具,它实现了:测试需求管理、测试用例专管理、测试业务组属件管理、测试计划管理、测试执行、测试结果日志察看、测试结果分析、缺陷管理,并且支持测试需求和测试用例之间的关联关系,可以通过测试需求索引测试用例。

自动生成包括测试计划、测试过程、缺陷报告、测试用例、测试内容。

5. 求一份学生管理系统的实验报告 软件体系结构

可以通过网络Hi通知我
有时间可以解决你的问题
相近的要求也可以通知我

ES:\\

6. 如何测试一个学生管理系统——写测试用例·

学生管理系统
详细设计说明书
编写说明
标题:详细设计说明书
类别:文档
密级:内部
编辑软件:Microsoft Word 2000 中文版
版本历史:
版本 作者 日期 备注
V1.01 2002/09/08 详细设计说明书
V1.0.2 2003/08/30 详细设计说明书

编写目的:
本文档详细描述组成系统的各个软件组成部分,包括每个软件模块(或类)的属性、方法、事件,各软件模块的外部接口说明,测试要点等内容。
本文档由项目组维护,供项目组使用。

第1章 引言
1.1. 项目说明
项目名称:乐山师范学院学生管理系统。
项目提出单位:乐山师范学院计算机科学系
项目开发者:乐山师范学院计算机科学系Attract工作室
项目使用部门:乐山师范学院各系科(学院)
项目建设单位:乐山师范学院计算机科学系

1.2. 项目定义
系科综合管理信息系统是为了适应现代化学校管理的需要,加快推进我校数字化校园建设、充分利用校园网,利用网络、多媒体等计算机应用技术和手段,提高办公效率、改善质量的高效管理信息系统。
学生管理系统是系科综合管理信息系统的重要组成部分。
1.3. 编写目的
本文档为“乐山师范学院系科综合管理信息系统(学生管理系统)详细设计说明书”,主要用于为实现系统的功能而进行的系统详细设计说明,详细系统各软件组成模块的实现流程、功能、接口、编译、测试要点等内容,便于对系统的编码进行指导和约束。本文档供项目组全体成员及项目组领导,单元测试人员阅读。

1.4. 参考资料
《学生管理系统_系统软件需求说明书》。
《学生管理系统_系统概要设计说明书》。
《学生管理系统_数据库设计说明书(数据库字典)》。

第3章 系统功能实现
从前面需求分析可以看出,系统功能庞杂,主要分为前台浏览器(B/S)信息发布和数据查询,后台(C/S)数据管理和处理,学生管理功能部分数据分为5类:新生相关;在校生相关;组织社团相关;毕业生相关;学生成绩综合查询相关。从使用和操作的功能上分,有三种用户:普通客户(浏览器浏览、查询);业务数据管理人员(学生工作辅导员、教务干事);系统管理员。为便于整个系统组织管理,把各个相对独立的数据或功能组织到整个大系统中来,我们把各个相对独立的功能完全独立设计,编译成独立的目标(功能)模块(single Executable),各功能模块最后被集成到一个称为虚拟桌面的控制台模块中。相应地将系统结构分为一个控制台程序和五个子系统,各子系统又分为若干各子模块。对应于每一个模块,几乎都有录入、查询、修改、删除、查看详细资料这几个功能。整个业务流程就是由这几种基本功能实现的。在这里每个模块都要用到的功能没必要在每个子模块里重复阐述,在每个子模块里只列出区别于其它子模块的功能实现。

3.1. 系统控制台模块
功能:
各子功能模块的组织和调用;
统一的登陆界面实现到数据库服务器的登陆;
显示系科主页Web的首页(主要是系科重要通知、消息等);学院通知页面;系科每周工作安排。
系统图标。
设计:
1. 登陆数据库:
输入数据库服务器名(ServerIP)、用户账号()UserID、密码(PassWord);以账号DEP_Computer0、密码DEP_Computer0登陆数据库服务器,检索系统权限表,根据权限设置相应功能模块:
①无此用户或禁止权限
Enable := False;
②浏览权限
Enable := True;
修改 UserID := Dep_Computer1;
修改 PassWord := 1111111111111;
③修改权限
Enable := True;
修改 UserID := Dep_Computer2;
修改 PassWord := 222222222222;
2. 采用Win31下程序组、程序项的原理组织各执行模块:
登陆服务器
新生录取数据、入学报道管理
学生信息(在校)管理
学生社团管理
毕业生信息管理
学生成绩综合查询与统计
各程序组、程序项的显示分别可以是分层/树状/大图标/小图标等方式;各程序项或菜单项的名称命名为相应功能模块的目标代码文件名。
3.可执行功能模块的调用执行:通过程序项或菜单项名称获取可执行目标代码文件名,应用API函数CreateProcess开始执行。

7. 学生成绩管理系统c语言实验报告

这个学生成绩管理系统实现了哪些功能
有程序吗 有的话 发给我 我按程序写报告
如果没有我就先写程序
look my name and jia me

8. 求一份学生成绩管理系统实验报告

C语言课程设计任务书
一、题目: 学生成绩管理
二、目的与要求
1. 目的:
(1)基本掌握面向过程程序设计的基本思路和方法;
(2)达到熟练掌握C语言的基本知识和技能;
(3)能够利用所学的基本知识和技能,解决简单的程序设计问题
2. 要求
基本要求:
1. 要求利用C语言面向过程的编程思想来完成系统的设计;
2. 突出C语言的函数特征,以多个函数实现每一个子功能;
3. 画出功能模块图;
4. 进行简单界面设计,能够实现友好的交互;
5. 具有清晰的程序流程图和数据结构的详细定义;
6. 熟练掌握C语言对文件的各种操作。
创新要求:
在基本要求达到后,可进行创新设计,如系统用户功能控制,对管理员级和一般级别的用户系统功能操作不同
三、信息描述
输入一个班10个学生的学号和每个学生考试三门功课(数学、英语、计算机基础)的成绩。编程计算出每个学生的总分和平均分,并按学生成绩优劣排序,最后打印一张按高分到低分名次排序的成绩单。要求:
1)排序用一个函数实现。
2)打印的成绩单表项包括:序号,学号、数学、英语、计算机、总分、平均分。
3)按实验报告电子模板格式填写实验内容。
四、功能描述
1. 学生基本信息及成绩所选科目成绩的录入。
2. 基本信息的查询(分系、班级;分科目)与修改。
3. 对每系或每班各科成绩进行分析(即求单科平均成绩、及格率和优秀率);
4. 对所开课程的成绩分析(求其平均成绩,最高分和最低分);
5. 对学生考试成绩进行排名(单科按系别或班级进行排名,对每一个班级,同一学期学生总体成绩进行排名,并显示各科成绩信息)
五、解决方案
1. 分析程序的功能要求,划分程序功能模块。
2. 画出系统流程图。
3. 代码的编写。定义数据结构和各个功能子函数。
4. 程序的功能调试。
5. 完成系统总结报告以及使用说明书
六、进度安排
此次课程设计时间为两周,分四个阶段完成:
1. 分析设计阶段。指导教师应积极引导学生自主学习和钻研问题,明确设计要求,找出实现方法,按照需求分析、总体设计、详细设计这几个步骤进行。
2. 编码调试阶段:根据设计分析方案编写C代码,然后调试该代码,实现课题要求的功能。
3. 总结报告阶段:总结设计工作,写出课程设计说明书,要求学生写出需求分析、总体设计、详细设计、编码、测试的步骤和内容。
4. 考核阶段。
#include <stdio.h>
#include <stdlib.h>
#define STU_NUM 10 /*宏定义学生的数量*/
struct student /*定义一个结构体用来存放学生学号、三门课成绩、总分及平均成绩*/
{
char stu_id[20]; /*学生学号;*/
float score[3]; /*三门课成绩;*/
float total; /*总成绩;*/
float aver; /*平均成绩;*/
};
/*排序用一个函数来实现*/
void SortScore(student *stu,int n)
{
student stud;
for(int i = 0; i < n-1; i++)
for(int j = i+1 ; j < n; j++)
{
if(stu[i].total < stu[j].total)
{
stud = stu[i];
stu[i] = stu[j];
stu[j] = stud;
}
}
}
int main( )
{
student stu[STU_NUM]; /*创建结构体数组中有10个元素,分别用来保存这10个人的相关信息。*/
/*输入这十个学生的相关信息*/
for(int i = 0; i<STU_NUM; i++)
{
printf("请输入第%d个学生的学号:",i+1);
scanf("%s",&stu[i].stu_id);
printf("输入第%d个学生的数学成绩:",i+1);
scanf("%f",&stu[i].score[0]);
printf("输入第%d个学生的英语成绩:",i+1);
scanf("%f",&stu[i].score[1]);
printf("输入第%d个学生的计算机成绩:",i+1);
scanf("%f",&stu[i].score[2]);
stu[i].total = stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
stu[i].aver = stu[i].total/3;
}
printf("\n");

SortScore(stu,STU_NUM);/*调用排序函数*/
/*输出排序后的各学生的成绩*/
for(i = 0 ; i < STU_NUM; i++)
{
printf("序号: %d\t",i);
printf("学号:%s\t",stu[i].stu_id);
printf("数学:%f\t",stu[i].score[0]);
printf("英语:%f\t",stu[i].score[1]);
printf("计算机:%f\t",stu[i].score[2]);
printf("平均成绩:%f\t",stu[i].aver);
printf("总分:%f\t",stu[i].total);
printf("\n\n");
}
return 0;
}
注:(源程序中主要标识符含义说明)
#define STU_NUM 10 /*宏定义学生的数量*/
struct student /*定义一个结构体用来存放学生学号、三门课成绩、总分及平均成绩*/
{
char stu_id[20]; /*学生学号;*/
float score[3]; /*三门课成绩;*/
float total; /*总成绩;*/
float aver; /*平均成绩;*/
}
实验结果:
输入 :(只输入后面的数字,前面的文字是自己产生的)。
请输入第1个学生的学号:001
输入第1个学生的数学成绩:1
输入第1个学生的英语成绩:1
输入第1个学生的计算机成绩:1
请输入第2个学生的学号:002
输入第2个学生的数学成绩:2
输入第2个学生的英语成绩:2
输入第2个学生的计算机成绩:2
请输入第3个学生的学号:003
输入第3个学生的数学成绩:3
输入第3个学生的英语成绩:3
输入第3个学生的计算机成绩:3
请输入第4个学生的学号:004
输入第4个学生的数学成绩:4
输入第4个学生的英语成绩:4
输入第4个学生的计算机成绩:4
请输入第5个学生的学号:005
输入第5个学生的数学成绩:5
输入第5个学生的英语成绩:5
输入第5个学生的计算机成绩:5
请输入第6个学生的学号:006
输入第6个学生的数学成绩:6
输入第6个学生的英语成绩:6
输入第6个学生的计算机成绩:6
请输入第7个学生的学号:007
输入第7个学生的数学成绩:7
输入第7个学生的英语成绩:7
输入第7个学生的计算机成绩:7
请输入第8个学生的学号:008
输入第8个学生的数学成绩:8
输入第8个学生的英语成绩:8
输入第8个学生的计算机成绩:8
请输入第9个学生的学号:009
输入第9个学生的数学成绩:9
输入第9个学生的英语成绩:9
输入第9个学生的计算机成绩:9
请输入第10个学生的学号:010
输入第10个学生的数学成绩:10
输入第10个学生的英语成绩:10
输入第10个学生的计算机成绩:10
输出:
序号: 0 学号:010 数学:10.000000 英语:10.000000 计算机:10.000000
平均成绩:10.000000 总分:30.000000

序号: 1 学号:009 数学:9.000000 英语:9.000000 计算机:9.000000
平均成绩:9.000000 总分:27.000000

序号: 2 学号:008 数学:8.000000 英语:8.000000 计算机:8.000000
平均成绩:8.000000 总分:24.000000

序号: 3 学号:007 数学:7.000000 英语:7.000000 计算机:7.000000
平均成绩:7.000000 总分:21.000000

序号: 4 学号:006 数学:6.000000 英语:6.000000 计算机:6.000000
平均成绩:6.000000 总分:18.000000

序号: 5 学号:005 数学:5.000000 英语:5.000000 计算机:5.000000
平均成绩:5.000000 总分:15.000000

序号: 6 学号:004 数学:4.000000 英语:4.000000 计算机:4.000000
平均成绩:4.000000 总分:12.000000

序号: 7 学号:003 数学:3.000000 英语:3.000000 计算机:3.000000
平均成绩:3.000000 总分:9.000000

序号: 8 学号:002 数学:2.000000 英语:2.000000 计算机:2.000000
平均成绩:2.000000 总分:6.000000

序号: 9 学号:001 数学:1.000000 英语:1.000000 计算机:1.000000
平均成绩:1.000000 总分:3.000000
七、撰写课程设计报告或课程设计总结
课程设计报告要求:
总结报告包括需求分析、总体设计、详细设计、编码(详细写出编程步骤)、测试的步骤和内容、课程设计总结、参考资料等,不符合以上要求者,则本次设计以不及格记。

C语言常见错误
书写标识符时,忽略了大小写字母的区别
main()
{
int a=5;
printf("%d",A);
}
编译程序把a和A认为是两个不同的变量名,而显示出错信息。C认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。
2.忽略了变量的类型,进行了不合法的运算。
main()
{
float a,b;
printf("%d",a%b);
}
%是求余运算,得到a/b的整余数。整型变量a和b可以进行求余运算,而实型变量则不允许进行“求余”运算。
3.将字符常量与字符串常量混淆。
char c;
c="a";
在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。C规定以“\”作字符串结束标志,它是由系统自动加上的,所以字符串“a”实际上包含两个字符:‘a'和‘\',而把它赋给一个字符变量是不行的。
4.忽略了“=”与“==”的区别。
在许多高级语言中,用“=”符号作为关系运算符“等于”。如在BASIC程序中可以写
if (a=3) then …
但C语言中,“=”是赋值运算符,“==”是关系运算符。如:
if (a==3) a=b;
前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。
5.忘记加分号。
分号是C语句中不可缺少的一部分,语句末尾必须有分号。
a=1
b=2
编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。
{ z=x+y;
t=z/100;
printf("%f",t);
}
对于复合语句来说,最后一个语句中最后的分号不能忽略不写(这是和PASCAL不同的)。
6.多加分号。
对于一个复合语句,如:
{ z=x+y;
t=z/100;
printf("%f",t);
};
复合语句的花括号后不应再加分号,否则将会画蛇添足。
又如:
if (a%3==0);
I++;
本是如果3整除a,则I加1。但由于if (a%3==0)后多加了分号,则if语句到此结束,程序将执行I++语句,不论3是否整除a,I都将自动加1。
再如:
for (I=0;I<5;I++);
{scanf("%d",&x);
printf("%d",x);}
本意是先后输入5个数,每输入一个数后再将它输出。由于for()后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它。
7.输入变量时忘记加地址运算符“&”。
int a,b;
scanf("%d%d",a,b);
这是不合法的。Scanf函数的作用是:按照a、b在内存的地址将a、b的值存进去。“&a”指a在内存中的地址。
8.输入数据的方式与要求不符。①scanf("%d%d",&a,&b);
输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:
3,4
输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab。
②scanf("%d,%d",&a,&b);
C规定:如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。下面输入是合法的:
3,4
此时不用逗号而用空格或其它字符是不对的。
3 4 3:4
又如:
scanf("a=%d,b=%d",&a,&b);
输入应如以下形式:
a=3,b=4
9.输入字符的格式与要求不一致。
在用“%c”格式输入字符时,“空格字符”和“转义字符”都作为有效字符输入。
scanf("%c%c%c",&c1,&c2,&c3);
如输入a b c
字符“a”送给c1,字符“ ”送给c2,字符“b”送给c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔。
10.输入输出的数据类型与所用格式说明符不一致。
例如,a已定义为整型,b定义为实型
a=3;b=4.5;
printf("%f%d\n",a,b);
编译时不给出出错信息,但运行结果将与原意不符。这种错误尤其需要注意。
11.输入数据时,企图规定精度。
scanf("%7.2f",&a);
这样做是不合法的,输入数据时不能规定精度。
12.switch语句中漏写break语句。
例如:根据考试成绩的等级打印出百分制数段。
switch(grade)
{ case 'A':printf("85~100\n");
case 'B':printf("70~84\n");
case 'C':printf("60~69\n");
case 'D':printf("<60\n");
default:printf("error\n");
由于漏写了break语句,case只起标号的作用,而不起判断作用。因此,当grade值为A时,printf函数在执行完第一个语句后接着执行第二、三、四、五个printf函数语句。正确写法应在每个分支后再加上“break;”。例如
case 'A':printf("85~100\n");break;
13.忽视了while和do-while语句在细节上的区别。
(1)main()
{int a=0,I;
scanf("%d",&I);
while(I<=10)
{a=a+I;
I++;
}
printf("%d",a);
}
(2)main()
{int a=0,I;
scanf("%d",&I);
do
{a=a+I;
I++;
}while(I<=10);
printf("%d",a);
}
可以看到,当输入I的值小于或等于10时,二者得到的结果相同。而当I>10时,二者结果就不同了。因为while循环是先判断后执行,而do-while循环是先执行后判断。对于大于10的数while循环一次也不执行循环体,而do-while语句则要执行一次循环体。
14.定义数组时误用变量。
int n;
scanf("%d",&n);
int a[n];
数组名后用方括号括起来的是常量表达式,可以包括常量和符号常量。即C不允许对数组的大小作动态定义。
15.在定义数组时,将定义的“元素个数”误认为是可使的最大下标值。
main()
{static int a[10]={1,2,3,4,5,6,7,8,9,10};
printf("%d",a[10]);
}
C语言规定:定义时用a[10],表示a数组有10个元素。其下标值由0开始,所以数组元素a[10]是不存在的。
16.初始化数组时,未使用静态存储。
int a[3]={0,1,2};
这样初始化数组是不对的。C语言规定只有静态存储(static)数组和外部存储(exterm)数组才能初始化。应改为:
static int a[3]={0,1,2};
17.在不应加地址运算符&的位置加了地址运算符。
scanf("%s",&str);
C语言编译系统对数组名的处理是:数组名代表该数组的起始地址,且scanf函数中的输入项是字符数组名,不必要再加地址符&。应改为:
scanf("%s",str);
18.同时定义了形参和函数中的局部变量。
int max(x,y)
int x,y,z;
{z=x>y?x:y;
return(z);
}
形参应该在函数体外定义,而局部变量应该在函数体内定义。应改为:
int max(x,y)
int x,y;
{int z;
z=x>y?x:y;
return(z);
}
C语言心得体会
通过这次实训,增加了我学习软件技术的兴趣,虽然还不明确软件技术包含的具体内容,但从C语言这门课程开始,已发现程序设计的乐趣,在学习C语言的过程中也学到了许多计算机应用基础知识,对计算机的机体也有了一个大体的了解。
这次实训是老师给了范例程序,经过自己的改写,实现要求。先做简单的输出,一步步的再做其它图案,在实际操作过程中犯的一些错误还会有意外的收获,感觉实训很有意思。在具体操作中对这学期所学的C语言的理论知识得到巩固,达到实训的基本目的,也发现自己的不足之出,在以后的上机中应更加注意,同时体会到C语言具有的语句简洁,使用灵活,执行效率高等特点。发现上机实训的重要作用,特别是对数组和循环有了深刻的理解。
通过实际操作,学会 C语言程序编程的基本步骤、基本方法,开发了自己的逻辑思维能力,培养了分析问题、解决问题的能力。深刻体会到“没有做不到的,只有想不到的”,“团结就是力量”,“实践是检验真理的标准”,“不耻下问”……的寓意。
计时在此希望以后应多进行这样的实训,加长设间,培养学生独立思考问题的能力,提高实际操作水平。
八、参考资料 :《C语言程序设计教程》

热点内容
武汉大学学生会辅导员寄语 发布:2021-03-16 21:44:16 浏览:612
七年级学生作文辅导学案 发布:2021-03-16 21:42:09 浏览:1
不屑弟高考成绩 发布:2021-03-16 21:40:59 浏览:754
大学毕业证会有成绩单 发布:2021-03-16 21:40:07 浏览:756
2017信阳学院辅导员招聘名单 发布:2021-03-16 21:40:02 浏览:800
查询重庆2018中考成绩查询 发布:2021-03-16 21:39:58 浏览:21
结业考试成绩怎么查询 发布:2021-03-16 21:28:40 浏览:679
14中医医师资格笔试考试成绩查分 发布:2021-03-16 21:28:39 浏览:655
名著赏析课程标准 发布:2021-03-16 21:27:57 浏览:881
北京大学商业领袖高端培训课程 发布:2021-03-16 21:27:41 浏览:919