学分管理系统
天津城市建设学院
课程设计任务书
2011—2012 学年第 1 学期
电子与信息工程 系 计算机科学与技术 专业
班级
课程设计名称:
数据结构课程设计
设计题目:
学分管理系统
完成期限:自 2012 年 1 月 1 日至 2012 年 1 月 5 日共 1 周
设计依据、要求及主要内容(可另加附页):
一、设计目的
熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。
二、设计要求
(1)重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;
(2)按照课程设计的题目要求,独立地完成各项任务,严禁抄袭;凡发现抄袭,抄袭
者与被抄袭者皆以零分计入本课程设计成绩。凡发现实验报告或源程序雷同,涉及的全部人
员皆以零分计入本课程设计成绩;
(3)学生在接受设计任务后,首先要按设计任务书的要求编写设计进程表;
(4)认真编写课程设计报告。
三、设计内容
学分管理程序
具体功能如下:
(1) 通过键盘输入某位学生的学分;
(2) 给定学号,显示某位学生的学分完成情况;
(3) 给定某个班级的班号,显示该班所有学生学分完成情况;
(4) 给定某位学生的学号,修改该学生的学分信息;
(5) 按照某类课程的学分高低进行排序;
(6) 提供一些统计各类信息的功能。
学分管理系统
目录
一、需求分析...........................................................................................................- 2 -
二、总体设计...........................................................................................................- 3 -
三、详细设计...........................................................................................................- 4 -
四、程序调试...........................................................................................................- 5 -
五、核心源程序清单和执行结果...........................................................................- 5 -
六、感想与总结.....................................................................................................- 22 -
七、参考文献.........................................................................................................- 23 -
一、需求分析
学分管理程序
具体功能如下:
学分管理系统
(1) 通过键盘输入某位学生的学分;
(2) 给定学号,显示某位学生的学分完成情况;
(3) 给定某个班级的班号,显示该班所有学生学分完成情况;
(4) 给定某位学生的学号,修改该学生的学分信息;
(5) 按照某类课程的学分高低进行排序;
(6) 提供一些统计各类信息的功能。
测试数据:
欢迎进入学分管理程序
功能如下所示:
a 给定学号,显示某位学生的学分完成情况
b 给定某个班级的班号,显示该班所有学生学分完成情况
c 给定某位学生的学号,修改该学生的学分信息
d 按照某类课程的学分高低进行排序
e 提供一些统计各类信息的功能
f:退出
请键入相应的命令
a
请输入你要查询的学生的学号
09710201
09710201
b
方忍
20
30
40
20
30
请输入你要查询的班级名
09 计算机 2 班
09710201
09710202
09710203
09710204
09710205
方忍
20
张凌康 30
刘陈涛 25
李琦
19
王奕胜 30
30
28
28
15
14
40
38
36
13
21
20
30
25
57
8
30
32
30
61
98
二、总体设计
图 2-1 班级类
图 2-2 学生类
学分管理系统
存储所有学生信息 存储学生的学号,姓名,学分信息
图 2-3 程序类
程序类,控制整个程序的流程
三、详细设计
Student 类的一些重要方法:
void DisplayInfo(); //显示此学生的信息
void SetCredits(int credits,int number);//修改学生的学分,credits为修改值,number
为第几种课程
bool Compare(const Student&student,int number);//按照学生第number种课程的学分排
序
学分管理系统
int GetCredits(int number);//取得第number种课程的学分
Klass类的一些重要方法
void Add(const Student &student);//往班级里添加学生
void DisplayInfo();//打印班级信息
Student* Insearch(string studentID);//根据学生学号进行查询,用顺序查找法实现
string GetklassName();//返回班级名
void Sort(int number);//根据第number种课程的学分对所有学生进行高低排序
算法:
用了改进后的冒泡排序,重点是每冒出一个泡(即每比较一趟)后,记住最后比较的位置,
则此位置以后的数无需再比较,这样避免了无效比较。
int GetstudentNum();//此班级的学生人数
int TotalCredits(int number);//此班级第number种课程的总学分
Program类的一些重要方法
void OutTip();//此程序的说明,包括各种功能如何使用
void Init();//完成程序的初始化
void OperationFora();//针对输入a(即第一项功能)所做的操作,后面的一次类推
void OperationForb();
void OperationForc();
void OperationFord();
void OperationFore();
bool CheckCmd(char choice);//检查输入命令的合法性
void CheckNum(int &num);//检查输入是否为数字并作相应的处理
四、程序调试
再按学号,按班级查找时,用顺序超找发,算法的时间复杂度为O(n)
在按学号高低排序中,用的是改进的冒泡排序法,算法时间复杂度为 O(n)可以用快速排序
提高算法的平均时间复杂大,同时可以引入随机数,消除具体实例对算法复杂度的影响
起初,程序没有对一些不合法的输入命令进行检查,出现了一些异常,后来添加了不合法命
令的检查程序,同时给出相应的提示
本实验算法基本上很少;主要的算法有查找,排序;
五、核心源程序清单和执行结果
程序申明:
#pragma once
#include"Klass.h"
#include
#include
class Program
{
学分管理系统
public:
Program(void);
Program(std::string fileName[],int klassNum);
~Program(void);
void Run();
//将klass的信息写到文件中
void Write();
private:
void OutTip();
void Init();
void OperationFora();
void OperationForb();
void OperationForc();
void OperationFord();
void OperationFore();
bool CheckCmd(char choice);
void CheckNum(int &num);
private:
static const int maxklassnum=20;
int klassNum;
fstream inout[maxklassnum];
Klass klass[maxklassnum];
};
程序定义:
#include "StdAfx.h"
#include "Program.h"
#include "Student.h"
#include "Klass.h"
#include
using namespace std;
Program::Program(void)
{
}
Program::Program(std::string fileName[],int klassNum)
{
this->klassNum=klassNum;
for(int i=0;iklassNum;++i)
{
学分管理系统
inout[i].open(fileName[i]);
}
}
Program::~Program(void)
{
}
void Program::OutTip()
{
}
cout<<"
cout<<"
欢迎进入学分理程序\n";
功能如下所示\n";
cout<<"a给定学号,显示某位学生的学分完成情况\n"
<<"b给定某3个班级的班号,显示该班所有学生学分完成情况\n"
<<"c给定某3位学生的学号修改该学生的学分信息\n"
<<"d按照某类课程的学分高低进行排序\n"
<<"e提供一些统计各类信息的功能\n"
<<"f:退出\n";
cout<<"请键入相应的命令\n";
void Program::Run()
{
Init();
OutTip();
char choice;
while(true)
{
cin>>choice;
while(!CheckCmd(choice))
{
}
cout<<"你输入的命令不合法,请重新输入\n";
cin>>choice;
switch(choice)
{
case'a':
OperationFora();
break;
case'b':
OperationForb();
学分管理系统
break;
case'c':
OperationForc();
break;
case'd':
OperationFord();
break;
case'e':
OperationFore();
break;
case 'f':
Write();
exit(1);
}
}
}
void Program::Init()
{
for(int i=0;i>klassName;
klass[i].Init(klassName);
string studentID,name;
int credits[Student::coursenum];
Student student;
for(int m=0;m