数据结构课程设计学生成绩管理问题

更新时间:2024-01-12 18:45:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数据结构课程设计

题 目: 学生成绩管理问题 学 院: 理学院 班 级: 数学11-1班 学 生 姓 名: 任树成 学 生 学 号: 2011027040 指 导 教 师: 张太发

2012年 12月 5日

课程设计任务书

姓名 设计题目 任树成 班级 数学11-1班 学号 08 学生成绩管理问题 1.利用模块化的思想化整为零设计子程序。 理论要点 2.利用数组存储学生信息。 3.利用单链表储存便于对数据进行处理。 设计目标 实现学生信息的录入,查找,保存,添加,删除,排序。学生信息包括学号,姓名,英语数学语文三门课的成绩。 1.需求分析,主要是输入输出的形式和输入值的范围。 研究方法步骤 2.(1) 主界面设计,设计一个含有多个菜单项的主控菜单; (2) 存储单元设计,利用数组及单链表结合的方式存储; (3) 系统功能设计。 3.进行详细设计。 预期结果 基本实现学生信息的录入,查找,保存,添加,删除,排序。 1.资料查找、系统分析,概要设计;时间安排1天。 2.系统详细设计、功能设计;时间安排1天。 计划与进3.算法实现、编程调试;时间安排4天。 步的安排 4.资料整理、课程设计说明书编写;时间安排1天。 5.课程设计开始时间为 2012年11月 28日

摘要

针对学生成绩管理问题,学习了数据结构以后,尝试做了学生成绩管理系统。学生成绩管理是学校教务管理的重要组成部分,其处理信息量很大,本设计是对学生的成绩管理做一个简单的模拟。

本文将利用数据结构所学知识,对学生成绩管理系统做了尝试,这个程序的主要功能是输入学生的学号、姓名对其进行存储,在存储后可以对学生的成绩按学号和姓名进行查寻。该系统具有存贮学生数据,按学号、姓名查询,列出学生成绩和统计功能。使用方法:系统输入数据后,将在当前目录中建立一个名为date文件,用于保存输入的数据。学号输入只能用数字输入,并且学号只能是10位。姓名输入符合中国人的姓名,只能用中文,且最长为5个汉字。

《学生成绩管理系统》是对学生的成绩进行修改和管理,而且方便快速,这个程序虽然简单,但是可以作为老师的辅助软件,对学生的各种成绩进行管理。

通过课程设计培养了我的动手能力以及综合运用所学的数据结构基础理论,基础知识,基本技能,进行程序分析和程序开发,提高在实际开发中解决问题的能力,达到了能够利用数据结构结合C++语言进行应用程序的规划,分析,设计和实施,更能进一步使我对这门语言有深刻的理解和更好的得到巩固,更能对我所学的知识得到检验。

由于是第一次用C++编写,所以水平有限此系统还有许多不够完整和严密性,敬请老师指正!

关键词 学生成绩管理,数组,单链表

I

目录

摘要 ................................... 错误!未定义书签。 1 课程设计题目 ........................ 错误!未定义书签。 2 需求分析 ............................................. 1 3 概要设计 ............................................. 1 4 详细设计 ............................................. 1 5 用户使用说明 ........................................ 20 6 测试结果 ............................................ 21 7 总结 ................................................ 23 参考文献 ............................................... 23

II

数据结构课程设计

学生成绩管理问题

1. 课程设计题目

学生成绩管理是学校教务管理的重要组成部分,其处理信息量很大,本设计是对学生的成绩管理做一个简单的模拟,用菜单选择操作方式完成下列主要功能:

(1) 登记学生成绩; (2) 查询学生成绩; (3) 插入学生成绩; (4) 删除学生成绩; 要求对每个功能分别用函数实现。 2. 需求分析

(1) 输入数据为整型,学生信息不超过100条; (2) 输出数据为整型;

(3) 该系统可以实现学生信息增加,删除,查找,排序,保存功能。

3. 概要设计

为了实现以上功能,可从3个方面着手设计。

(1) 主界面设计,设计一个含有多个菜单项的主控菜单。 (2) 存储单元设计 (3) 系统功能设计

4. 详细设计

主要包括各部分函数功能,说明及流程图,源程序。 (1) 主函数int main()主要显示主菜单;

信息增加模块void cla::sadd()主要用于学生成绩的录入; 信息保存模块void ssave()主要用于学生成绩的保存; 信息删除模块void sremove()主要用于信息删除; 信息排序模块void staxis(),可根据不同情况进行排序; 信息读取模块void sload()可以显示主菜单;

信息查询模块void ssearch()可根据学号姓名进行查找; 信息修改模块void samend()可用于信息修改。 (2) 成绩管理系统重要函数调用调用关系如图所示。

其中成绩排序模块包括学号排序及数学,语文,英语及总成绩排序。 成绩查询模块可根据学号,姓名查询。

- 1 -

数据结构课程设计

学生管理系统

信 信 信信信信信 息息 息 息息息息 增修排保删查读

加改序存除询取模模模模模模模 块 块 块 块 块 块 块

(3) 源程序

#include

#include #include #include using namespace std; #define max 100;

class student { public: student *next; public:

string name;//姓名 long num;//学号

float x,y,z;//数学,语文,英语 float AA;//总分

void play()

{ cout<

- 2 -

语:\总 数据结构课程设计

student(string sname,long snum,int sx,int sy,int sz) {

name=sname; num=snum; x=sx; y=sy; z=sz; } };

class cla { public: cla()//构造函数 { stu=0; sload(); }

~cla()//析构函数 { student *p; p=stu; while(p) { p=p->next; delete stu; stu=p; } stu=0; }

void sadd(); //添加 void sremove(); //删除- 3 -

数据结构课程设计

void samend(); //修改 void ssearch(); //查询 void staxis(); //排序 void ssave(); //保存 void sload(); //读取

//排序函数

void pxh(); //按学号排序 void psx(); //按数学成绩排序 void pyw(); //按语文成绩排序 void pyy(); //按英语成绩排序 void pAA(); //按总成绩排序 private:

student *stu; //头接点 };

void cla::sadd()//添加 {

student *q; string name1; long num1; int x1,y1,z1;

system(\

cout<<\增加的学生** \\n\

cout<<\请输入学生的(中间用空格间隔) \

cout<<\姓名 学号 数学成绩 语文成绩 英语成绩:\ cin>>name1>>num1>>x1>>y1>>z1;

q=new student(name1,num1,x1,y1,z1); q->next=0; q->AA=x1+y1+z1; if(stu)

- 4 -

数据结构课程设计

{

student *t; t=stu;

if(t->num==num1) {

cout<<\学号已存在,请重新输入\ return; }

while(t->next) {

if(t->num==num1) {

cout<<\学号已存在,请重新输入\ return; } t=t->next; } t->next=q; } else { stu=q; }

cout<<\输入完毕\ }

void cla::sremove()//删除 {

system(\ int num1;

cout<<\删除学生信息 **\\n\ cout<<\请输入想要删除学生的学号:\ cin>>num1;

- 5 -

数据结构课程设计

//查找要删除的结点 student *p1,*p2; p1=stu; while(p1) {

if(p1->num==num1) break; else { p2=p1; p1=p1->next; } }

//删除结点

if(p1!=NULL)//若找到结点,则删除 {

p1->play();

cout<<\确定删除吗?[Y/N]\ char c;cin>>c;

if(toupper(c)!='Y') return;

if(p1==stu) //若要删除的结点是第一个结点 {

stu=p1->next; delete p1; }

else //若要删除的结点是后续结点 {

p2->next=p1->next; delete p1; }

cout<<\找到学号为\的学生,并删除\\n\ }

- 6 -

数据结构课程设计

else //未找到结点

cout<<\未找到想要删除的学生!\\n\ }

void cla::samend()//修改 {

system(\ long num1;

cout<<\修改学生信息 **\\n\ cout<<\输入要修改学生的学号\ cin>>num1;

//查找要修改的结点 student *p1,*p2; p1=stu; while(p1) {

if(p1->num==num1) break; else { p2=p1; p1=p1->next; } }

if(p1!=NULL) {

cout<<\学号是\的学生的信息\

cout<<\姓名 \数学\语文\英语\ cout<<\请输入修改后的信息:姓名 数学成绩 语文成绩 英语成绩\ cin>>p1->name>>p1->x>>p1->y>>p1->z; p1->AA=p1->x+p1->y+p1->z; cout<<\修改成功\ }

- 7 -

数据结构课程设计

else //未找到接点 cout<<\未找到!\\n\ }

void cla::ssearch()//查询 {

system(\

cout<<\查询学生信息 **\\n\ cout<<\请输入查询方式:\ cout<<\按学号查询\ cout<<\按姓名查询\ cout<<\返回\ char c; cin>>c; switch (c) { case '1': {

long num1;

cout<<\要查询的学号\ cin>>num1; //查找要查询的结点 student *p1,*p2; p1=stu; while(p1) {

if(p1->num==num1) break; else { p2=p1; p1=p1->next; } }

- 8 -

数据结构课程设计

if(p1!=NULL) {

cout<<\学号是\的学生的信息\

cout<<\姓名:\数学:\语文:\英语:\ cout<<\查询完毕...\ }

else //未找到接点 cout<<\未找到!\\n\ break; } case '2': {

string name1;

cout<<\要查询的学生姓名\ cin>>name1; //查找要查询的结点 student *p1,*p2; p1=stu; while(p1) {

if(p1->name==name1) break; else { p2=p1; p1=p1->next; } }

if(p1!=NULL) {

cout<

cout<<\学号:\数学:\语文:\英语:\ cout<<\查询完毕...\

- 9 -

数据结构课程设计

}

else //未找到接点 cout<<\未找到!\\n\ break; }

case '3': return; } }

void cla::pxh() //按学号排序 {

student *p1,*p2; int n; p1=stu; n=1;

while(p1->next) { n++; p1=p1->next; }

cout<<\共有\条信息...\ int i; p1=stu; for(i=1;i

if (p1->num>p1->next->num) // 如果头结点大于第二个的 {

p2=p1->next;

p1->next=p1->next->next; p2->next=p1; //头结点交换 stu=p2; } p1=stu;

- 10 -

数据结构课程设计

while(p1->next->next) //中间的交换 { p2=p1; p1=p1->next;

if(p1->num>p1->next->num) {

p2->next=p1->next; p1->next=p1->next->next; p2->next->next=p1; p1=p2->next; //交换 } } }

p1=stu; do {

p1->play(); p1=p1->next; }

while(p1); }

void cla::psx()//按数学成绩排序 {

student *p1,*p2; int n; p1=stu; n=1;

while(p1->next) { n++; p1=p1->next; }

cout<<\共有\条信息...\

- 11 -

数据结构课程设计

int i; p1=stu; for(i=1;i

if (p1->x>p1->next->x) // 如果头结点大于第二个的 { p2=p1->next;

p1->next=p1->next->next; p2->next=p1; //头结点交换 stu=p2; } p1=stu;

while(p1->next->next) //中间的交换 { p2=p1; p1=p1->next; if(p1->x>p1->next->x) {

p2->next=p1->next; p1->next=p1->next->next; p2->next->next=p1; p1=p2->next; //交换 } } } p1=stu; do {

p1->play(); p1=p1->next; }

while(p1); }

void cla::pyw()//按语文成绩排序

- 12 -

数据结构课程设计

{

student *p1,*p2; int n; p1=stu; n=1;

while(p1->next) { n++; p1=p1->next; }

cout<<\共有\条信息...\ int i; p1=stu; for(i=1;i

if (p1->y>p1->next->y) // 如果头结点大于第二个的 { p2=p1->next;

p1->next=p1->next->next; p2->next=p1; //头结点交换 stu=p2; } p1=stu;

while(p1->next->next) //中间的交换 { p2=p1; p1=p1->next; if(p1->y>p1->next->y) {

p2->next=p1->next; p1->next=p1->next->next; p2->next->next=p1; p1=p2->next; //交换 } } } p1=stu;

- 13 -

数据结构课程设计

do {

p1->play(); p1=p1->next; }

while(p1); }

void cla::pyy()//按英语成绩排序 {

student *p1,*p2; int n; p1=stu; n=1;

while(p1->next) {

n++; p1=p1->next; }

cout<<\共有\条信息...\ int i; p1=stu; for(i=1;i

if (p1->z>p1->next->z) // 如果头结点大于第二个的 {

p2=p1->next;

p1->next=p1->next->next; p2->next=p1; //头结点交换 stu=p2; } p1=stu;

while(p1->next->next) //中间的交换 { p2=p1;

- 14 -

数据结构课程设计

p1=p1->next; if(p1->z>p1->next->z) {

p2->next=p1->next; p1->next=p1->next->next; p2->next->next=p1; p1=p2->next; //交换 } } } p1=stu; do {

p1->play(); p1=p1->next; } while(p1); }

void cla::pAA()//按总分排序 {

student *p1,*p2; int n; p1=stu; n=1;

while(p1->next) {

n++; p1=p1->next; }

cout<<\共有\条信息...\ int i; p1=stu; for(i=1;i

- 15 -

数据结构课程设计

if (p1->AA>p1->next->AA) // 如果头结点大于第二个的 {

p2=p1->next;

p1->next=p1->next->next; p2->next=p1; //头结点交换 stu=p2; } p1=stu;

while(p1->next->next) //中间的交换 { p2=p1; p1=p1->next;

if(p1->AA>p1->next->AA) {

p2->next=p1->next; p1->next=p1->next->next; p2->next->next=p1; p1=p2->next; //交换 } } } p1=stu; do {

p1->play(); p1=p1->next; } while(p1); }

void cla::staxis()//排序 {

system(\

- 16 -

数据结构课程设计

char c;

cout<<\请选择以何种方式排序:\ cout<<\……以学号排序\ cout<<\……以数学成绩排序\ cout<<\……以语文成绩排序\ cout<<\……以英语成绩排序\ cout<<\……以总分排序\ cout<<\……返回\ cout<<\请选择(1-6)\ cin>>c;

switch (c) {

case '1':pxh(); break; case '2':psx(); break; case '3':pyw(); break; case '4':pyy(); break; case '5':pAA(); break; case '6':return; } }

void cla::ssave() //保存到文件 {

system(\ char c;

cout<<\保存学生信息(将覆盖原文件),是否继续?[Y/N]:\ cin>>c;

if(toupper(c)!='Y') return;

ofstream tfile(\ student *p=stu;

- 17 -

数据结构课程设计

while(p)// 写入文件 {

tfile<name<<\ tfile<next; }

tfile.close();

cout<<\保存完毕...\ }

void cla::sload() //读取 {

student *p; p=stu; while(p) {

stu=p->next; delete p; p=stu; }

ifstream tfile(\

string name1; long num1; int x1,y1,z1;

tfile>>name1>>num1>>x1>>y1>>z1; while(tfile.good()) {

//创建学生接点 student *s; s=stu;

- 18 -

数据结构课程设计

s=new student(name1,num1,x1,y1,z1); s->next=0; s->AA=x1+y1+z1; if(stu) //若已经存在结点 {

student *p2; p2=stu;

while(p2->next) //查找尾结点 {

p2=p2->next; }

p2->next=s; //连接 }

else //若不存在结点(表空) {

stu=s; //连接 }

tfile>>name1>>num1>>x1>>y1>>z1; }

tfile.close();

cout<<\学生信息已经装入...\\n\ }

int main()

{ system (\

system (\ char c; cla a; do {

cout<<\学 生 成 绩 管 理 系 统 \\n\

cout<<\

- 19 -

数据结构课程设计

cout<<\作者:数学11-1班2011027040:任树成\\n\ cout<<\……增加学生 \\n\ cout<<\……删除学生 \\n\ cout<<\……修改学生 \\n\ cout<<\……查询学生信息 \\n\ cout<<\……排序 \\n\ cout<<\……保存信息 \\n\ cout<<\……读取信息 \\n\ cout<<\……退出 \\n\

cout<<\ cout<<\请选择(1-8):\ cin>>c; switch(c) {

case '1': a.sadd();break; case '2': a.sremove();break; case '3': a.samend();break; case '4': a.ssearch();break; case '5': a.staxis();break; case '6': a.ssave();break; case '7': a.sload();break; } }

while(c!='8'); return 0; }

5. 用户使用说明

(1) 进入本系统之后,随即显示系统主菜单页面。用户可在该界面下输入各

子菜单前对应的数字并按回车键,执行相应子菜单命令。

(2) 查询学生信息都是通过输入编号并按回车键实现的,成绩之间用空格隔开。学号输入只能用数字输入,并且学号只能是10位。姓名输入符合中国人的姓名,只能用中文,且最长为5个汉字。

- 20 -

数据结构课程设计

6.测试结果

系统运行主界面如图1所示。

图1学生成绩管理系统界面

(1) 在主菜单下,用户输入1后按回车键,运行结果如图2所示。

图2学生成绩增加界面

(2) 在主菜单下,用户输入6后按回车键,运行结果如图3所示。

图3学生成绩保存界面

(3) 在主菜单下,用户输入4后按回车键,运行结果如图4所示。

- 21 -

数据结构课程设计

图4学生成绩查询界面

(4) 在主菜单下,用户输入5后按回车键,运行结果如图5所示。

图5学生成绩排序界面

(5) 在主菜单下,用户输入3后按回车键,运行结果如图6所示。

- 22 -

数据结构课程设计

图6学生修改排序界面

(6) 在主菜单下,用户输入2后按回车键,运行结果如图7所示。

图7学生修改删除界面

(7) 在主菜单下,用户输入8后按回车键,退出。 7. 总结

通过本次的数据结构课程设计,让我学会了把书本上的知识应用到了实际中来。为了能更好的挑战自己,我还在在完成老师要求的基础上,增加了保存及用多种方式排序的子程序。虽然这一周中有过挫折和坎坷,有的问题一直到了最后才被解决,但是我认为这未必就不是好事,这样能锻炼我的意志,磨练我的耐心,失败是成功之母,这话一点都没错,没有失败就没有成功。 参考文献

1.《C++程序设计》 钱能 清华大学出版社 2.《C++程序设计试验指导》 钱能 清华大学出版社 3.《C程序设计》 谭浩强 清华大学出版社

- 23 -

课程设计评阅书

课程设计报告评语:(评阅意见主要对设计任务的合理性、规范性和正确性以及设计报告书的完整性、规范性和通顺性等方面作出评价)

报告成绩: 答辩记录与评语: 答辩成绩:

课程设计总成绩: 教师签名: 年 月 日

本文来源:https://www.bwwdw.com/article/ymqo.html

Top