资源描述
学生毕业设计管理系统_课程设计报告书
———————————————————————————————— 作者:
———————————————————————————————— 日期:
2
个人收集整理 勿做商业用途
《C++面向对象程序设计》
综合项目报告
项目名称: 学生毕业设计管理系统
专 业:
班 级:
项目成员:
报告日期:2010年12月
31
设计任务
一、基本要求
(1)要求学生达到熟练掌握C++语言的基本知识和技能;
(2)基本掌握面向对象程序设计的基本思路和方法;
(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
(4)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;
(5)要求在设计的过程中,建立清晰的类层次;
(6)在系统中至少要定义三个类,每个类中要有各自的属性和方法;
二、创新要求:
在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能及设计出比较友好的界面等。
三、设计方法和基本原理:
1、问题描述(功能要求):
某学校,主要有四类学生:专科生、本科生、硕士研究生和博士研究生.现在,需要存储这些学生的编号、姓名、年级和班级、级别、论文题目、指导老师和成绩,并显示全部信息。
要求:
1)其中,学生编号在生成学生信息时同时生成,每输入一个学生信息编号顺序加1.
2)程序对所有学生都有提升级别的功能
3)能按姓名或者编号显示、查找、增加、删除和保存各类学生的信息
2、问题的解决方案:
根据系统功能要求,可以将问题解决分为以下步骤:
(1)分析系统中的各个实体之间的关系及其属性和行为;
(2)根据问题描述,设计系统的类层次;
(3)完成类层次中各个类的描述(包括属性和方法);
(4)完成类中各个成员函数的定义;
(5)完成系统的应用模块;
(6)功能调试;
(7)完成系统总结报告以及系统使用说明书。
四、程序设计和调试: ;
以对话框的形式,展现程序的实现。
1、设计思路:
根据对学生信息的增删改查,为四个基本的模块,然后展开,运用文件流的方法,实现数据的保存。在原有基础上增加4个基本模块的一些功能,如以不同形式查看学生的信息。
系统功能模块图
类的层次图
学生类
学生信息结构体
姓名
学位
学号
调试过程
--—————--—-——-——--—-Configuration: Test — Win32 Debug-----———-—-—--—-—--—
Compiling...
Test.cpp
H:\C++项目\学生毕业设计管理系统\Test。cpp(50) : error C2039: 'next’ : is not a member of 'student’
H:\C++项目\学生毕业设计管理系统\Test.cpp(23) : see declaration of 'student’
H:\C++项目\学生毕业设计管理系统\Test.cpp(159) : error C2039: 'next’ : is not a member of ’student'
H:\C++项目\学生毕业设计管理系统\Test.cpp(23) : see declaration of ’student’
H:\C++项目\学生毕业设计管理系统\Test.cpp(159) : fatal error C1903: unable to recover from previous error(s); stopping compilation
执行 cl。exe 时出错。
Test。obj — 1 error(s), 0 warning(s)
程序代码
#include 〈iostream〉
#include 〈string>
#include〈cmath>
#include<fstream>
#include<iomanip>
using namespace std;
int amount=0;
int num=100; //当前最高学号
ofstream *file[50];
struct info //学生信息结构体
{
string xy;
string zy;
string bj;
string teacher;
string lw;
string score;
struct info *next;
};
class student //学生数据类
{
public:
int id;
string mun;
string name;
info sc3;
class student *next;
};
void input(student *head); //录入 //函数声明//
void search1(student *head); //姓名查询
void search2(student *head); //学号查询
void change(student *head); //修改
void shanchu(student *head); //删除
void get(student *head); //取数据
void display(); //显示菜单
void show(student *head); //显示数据
void readin(student *head); //保存数据
string int_char(int);
void main() ////主函数
{
system(”color f0");
char x;
bool flag2=0;
student *head=new student; //初始化学生数据
head—>next=NULL;
cout<<” ╭═══════════════╮ "<〈endl;
cout〈〈” ║ 学生毕业管理设计系统 ║ ”〈<endl;
cout<〈” ╭══════┤ =—=-=-=-=—=—=—=—=—=— ├══════╮”〈〈endl;
cout<<" ║ ║ 软件0921 -_-!!! ║ ║"<〈endl;
cout〈<" ║ ╰═══════════════╯ ║"〈〈endl;
cout〈<” ║ ╭───────────────────────╮ ║”<〈endl;
cout<<" ╰══┤ 作者: 王雪亮 毛亚明 陈晓琴 ├══╯”<<endl;
cout〈<" ╰───────────────────────╯ "〈<endl;
display(); //显示菜单
do
{
do
{
cin〉>x;
if((x〉=’0’&&x<='8'))
flag2=1;
else
{
cout〈〈”指令错误!!!!!!!!!!”〈〈endl;
cout〈〈” 请选择相应的数字进行操作: ";
}
}while(flag2==0);
switch(x)
{
case '1’:cout〈<”******************************现在进行学生信息录入******************************\n”;
input(head);
cout〈〈"输入的学生信息为:\n”;
show(head);
cout<〈endl;
display();
break;
case '2':
{
char z;
cout<<"******************************现在进行学生信息查询******************************\n";
cout〈<”请选择查询方式:";
cout〈<”(0).姓名查询;(1)。学号查询:”;
cin〉>z;
while(z!=’0’&&z!=’1’)
{
cout〈〈"指令错误<请选择(0)或者(1)!〉!!!!!!!"〈〈endl;
cout〈<”请选择查询方式:(0)。姓名查询;(1).学号查询:";
cin>>z;
}
switch(z)
{
case ’0’: search1(head);break;//按姓名查询
case '1’: search2(head);break;//按学号查询
}
cout<<endl;
display();
break;
}
case ’3': cout<〈"******************************现在进行学生信息修改******************************\n";
change(head);
cout<〈endl;
display();
break; //按姓名修改
case '4’: cout〈〈”******************************现在进行学生信息删除******************************\n”;
shanchu(head);
show(head);
cout〈〈endl;
display();
break; //删除
case ’5': cout〈<"******************************现在进行显示学生信息******************************\n”;
show(head);
cout〈〈endl;
display();
break; //显示数据
case ’6’:cout〈〈"******************************现在进行提取学生信息******************************\n";
get(head);
cout〈<endl;
display();
break;
case ’7’:cout〈〈”******************************现在进行保存学生信息******************************\n”;
readin(head);
cout<<endl;
display();
break;
case ’8':
cout〈<endl;
cout<〈" &您已退出学生信息管理系统, 谢谢您的使用!& \n”;
cout<<endl;
exit(0);
break;
}
}while(flag2==1);
}
void display() //显示菜单
{
cout<〈”请选择你需要的项目: \n";
cout<〈” [1]-录入; [2]-查询; \n”;
cout<〈” [3]—修改; [4]—删除; \n";
cout<<” [5]—显示; [6]—提取; \n";
cout〈<” [7]-保存; [8]—退出; \n";
cout<〈" 请选择你需要的数字进行操作: ";
}
void show(student *head) //显示学生数据
{
student *stu=head;
cout<〈”| 学号 | 学位 | 姓名 | 学院 | 专业 | 班级 | 导师 | 论文 | 成绩| ”<<endl;
while(stu—〉next!=NULL)
{
stu=stu—〉next;
cout〈<”| ”<<setw(9)〈〈(*stu).id;
cout〈<"| "〈〈setw(4)〈〈(*stu).mun;
cout〈〈" | "<〈setw(6)<<(*stu).name;
cout〈〈” | ”<<setw(4)〈〈(*stu).sc3。xy;
cout<<” | "<〈setw(4)〈〈(*stu).sc3.zy;
cout<〈” | ”<<setw(4)<〈(*stu)。sc3。bj;
cout〈〈" | "〈〈setw(4)〈〈(*stu)。sc3。teacher;
cout〈〈” | "<〈setw(4)<<(*stu).sc3.lw;
cout〈<" | "〈〈setw(4)<〈(*stu).sc3.score;
cout〈<"|"<〈endl;
}
}
void readin(student *head) //保存学生数据
{
char a;
student *stu=head—>next;
cout<〈"现在保存输入学生数据,是否继续操作?(y/n)";
cin〉>a;
ofstream outfile(”D:\\课设\\学生信息.txt”,ios::out);
if(! outfile)
{
cout〈<”打开文件错误!!!!!!!\n”;
exit(0);
}
while(a!=’n’)
{
while(stu!=NULL)
{
outfile<<"************************第"<〈amount<<"个学生的数据:*************************\n”;
outfile<<cout〈〈"| 学号 | 学位 | 姓名 | 学院 | 专业 | 班级 | 导师 | 论文 |成绩|”〈<endl;
outfile<〈" 学生信息: \n”
<<" | ”<<setw(9)〈<(*stu)。id〈〈"| ”〈<setw(4)〈<(*stu).mun<〈” | "<〈setw(6)<<(*stu)。name〈<" | "<<setw(4)<< (*stu).sc3。xy〈〈
" | ”〈〈setw(4)<〈(*stu).sc3.zy<<" | ”〈<setw(4)<<(*stu)。sc3。bj〈<" | ”〈<setw(4)〈〈(*stu)。sc3。teacher
〈〈" | ”<〈setw(4)<〈(*stu).sc3.lw<<” | ”〈〈setw(4)〈<(*stu).sc3.score<<endl;
amount++;
num++;
(*stu).id=num;
stu=stu—〉next;
}
break;
}
cout〈<”。。....成功将学生数据保存到<学生信息.txt〉中! ";
outfile。close();
}
void input(student *head) //录入学生数据
{
char c;
int j=0;
student *p=head;
file[j]=new ofstream("D:\\课设\\学生信息。txt",ios::app);
do
{
student *stu=new student;
(*stu)。id=num+1;
num++;
cout〈<”请输入学位(专科生,本科生,硕士研究生,博士研究生):"<〈setw(9);
cin>>(*stu)。mun;
cout<<”请输入姓名:”〈〈setw(20);
cin>>(*stu).name;
cout<<”请输入该生所在学院:"<〈setw(20);
cin〉〉(*stu)。sc3.xy;
cout<<”请输入该生所在专业:"<〈setw(20);
cin〉>(*stu)。sc3。zy;
cout〈<”请输入该生所在班级:”<<setw(20);
cin〉>(*stu)。sc3。bj;
cout<〈”请输入该生导师姓名:”〈〈setw(20);
cin〉>(*stu).sc3。teacher;
cout<<”请输入该生论文标题:”〈<setw(20);
cin>>(*stu).sc3。lw;
cout〈〈"请输入该生加权成绩:"<〈setw(20);
cin〉>(*stu)。sc3.score;
stu->next=p—〉next;
p—〉next=stu;
amount++;
cout〈<"数据录入成功,想继续录入吗(y/n)”;
cin>>c;
p=p—>next;
while(c!='y'&&c!='n')
{
cout<〈”指令错误<请输入y/n!>!!!!!!”〈<endl;
cout〈<"数据录入成功,想继续录入吗(y/n)";
cin〉>c;
}
}while(c==’y');
j++;
cout<<"输入了 "〈<amount〈〈"个学生的信息.”<〈endl;
}
void search1(student *head) //使用姓名查询学生数据
{
char c;
string name;
do
{
student *stu=head—〉next;
bool flag=0;
cout〈<”请输入你要查询的学生姓名:";
cin〉>name;
do{
if(stu!=NULL&&name==(*stu)。name) //输出总成绩
{
flag=1;
cout〈<”您要查询的学生是:”〈<stu->name<〈endl;
cout〈<"| 学号 | 学位 | 姓名 | 学院 | 专业 | 班级 | 导师 | 论文 |成绩| ”<〈endl;
cout〈<"| ”〈〈setw(9)〈〈(*stu).id;
cout〈<"| ”〈<setw(4)<<(*stu).mun;
cout〈〈" | ”<〈setw(6)〈<(*stu).name;
cout〈〈” | ”〈〈setw(4)<〈(*stu)。sc3。xy;
cout<〈” | "〈〈setw(4)<〈(*stu)。sc3.zy;
cout<<” | ”<<setw(4)<〈(*stu)。sc3。bj;
cout<<" | ”<〈setw(4)<〈(*stu)。sc3。teacher;
cout<〈" | ”〈〈setw(4)〈<(*stu)。sc3。lw;
cout〈<" | "<<setw(4)〈<(*stu)。sc3.score;
cout<〈” | ”〈〈endl;
}
stu=stu—〉next;
}while(stu!=NULL);
if(flag==0)
cout<<"对不起!您要查询的学生不存在!!!!!!!”<<endl;
cout<<"您想继续查询吗?(y/n)";
cin>>c;
while(c!='y'&&c!=’n')
{
cout〈〈”指令错误〈请输入y/n!>!!!!!!!”〈<endl;
cout〈〈"您想继续查询吗?(y/n)";
cin〉>c;
}
} while(c==’y');
}
void search2(student *head)//用学号查询学生数据
{
char c;int no;
do
{
student *stu=head-〉next;
int flag=0;
cout〈〈”请输入你要查询的学生学号:”;
cin>>no;
do
{
if(stu!=NULL&&no==(*stu)。id)
{
flag=1;
cout〈<”您要查询的学生是:"〈<stu-〉name<〈endl;
cout<<”| 学号 | 学位 | 姓名 | 学院 | 专业 | 班级 | 导师 | 论文 |成绩| "<〈endl;
cout〈<”| ”<〈setw(9)〈<(*stu).id;
cout〈〈”| ”〈〈setw(4)〈<(*stu).mun;
cout<<” | "<〈setw(6)〈<(*stu).name;
cout〈<" | ”<〈setw(4)〈〈(*stu)。sc3.xy;
cout〈<” | "〈<setw(4)〈<(*stu)。sc3。zy;
cout〈〈” | ”〈<setw(4)<〈(*stu)。sc3。bj;
cout<<" | "〈<setw(4)〈<(*stu)。sc3.teacher;
cout<<" | ”〈〈setw(4)〈<(*stu)。sc3。lw;
cout<<” | "<<setw(4)<<(*stu)。sc3.score;
cout〈〈"|”〈<endl;
}
stu=stu-〉next;
}while(stu!=NULL);
if(flag==0)
cout〈<”对不起!您要查询的学生不存在!!!!!!!"〈〈endl;
cout<〈"您想继续查询吗?(y/n)”;
cin>>c;
while(c!=’y'&&c!='n')
{
cout〈〈”指令错误<请输入y/n!>!!!!!!!”〈〈endl;
cout〈<"您想继续查询吗?(y/n)"〈<endl;
cin>〉c;
}
}while(c=='y');
}
void change(student *head) //修改学生数据
{
string name; char c;
do
{
bool flag2=0;
student *stu=head ;
info sc3;
string mu;
cout<〈"请输入您要修改的学生的姓名:";
cin>〉name;
do
{
if(name==(*stu).name)
{
flag2=1;
cout〈<”请输入新学位信息:”;
cin>〉mu;
cout<〈”请输入新学院信息:";
cin〉>sc3。xy;
cout〈〈"请输入新专业信息:";
cin〉〉sc3。zy;
cout〈<"请输入新班级信息:”;
cin〉>sc3。bj;
cout〈〈”请输入新导师信息:";
cin>〉sc3。teacher;
cout<<"请输入新论文信息:”;
cin〉〉sc3.lw;
cout<〈"请输入新加权成绩信息:”;
cin>>sc3.score;
(*stu).mun=mu;
(*stu).sc3.xy=sc3.xy;
(*stu).sc3。zy=sc3。zy;
(*stu)。sc3。bj=sc3。bj;
(*stu).sc3.teacher=sc3.teacher;
(*stu).sc3.lw=sc3。lw;
(*stu)。sc3.score=sc3.score;
cout〈〈”| 学号 | 学位 | 姓名 | 学院 | 专业 | 班级 | 导师 | 论文 | 成绩 | "<〈endl;
cout〈〈”| ”〈<setw(9)〈<(*stu).id;
cout<〈"| "<<setw(4)<<(*stu).mun;
cout〈〈" | "<〈setw(6)<〈(*stu).name;
cout<<” | "〈<setw(4)<〈(*stu)。sc3。xy;
cout<<" | ”〈<setw(4)〈<(*stu)。sc3.zy;
cout〈<” | "<<setw(4)<<(*stu).sc3.bj;
cout〈<” | ”<<setw(4)<〈(*stu).sc3。teacher;
cout<〈" | ”〈<setw(4)<<(*stu).sc3.lw;
cout〈<" | ”〈〈setw(4)〈〈(*stu).sc3。score;
cout<<"|"<<endl;
cout<<".....。。数据修改成功!\n";
break;
}
stu=stu-〉next;
}while(stu!=NULL);
if(flag2==0)
{
cout<<"对不起!您要修改的学生不存在!请检查重新输入!!!!!!!"〈<endl;
}
cout〈<”想继续修改吗?(y/n)";
cin〉〉c;
if(c!=’y'&&c!=’n’)
{
cout<〈"指令错误!请重新输入<y/n>!!!!!!!";
cin〉〉c;
}
}while(c==’y');
}
void shanchu(student *head)//删除学生数据
{
char c;int no;
do
{
int flag=0;
cout<<"请输入你要删除的学生学号:”;
cin〉〉no;
student *q,*p;
q=head;
while(q—〉next!=NULL&&q->next—>id!=no)
q=q-〉next;
if(q—〉next!=NULL)
{
flag=1;
p=q—〉next;
q—>next=q—>next—>next;
amount—-;
free(p);
cout<〈"...。。.成功删除! ”;
}
if(flag==0)
cout<<”对不起!您要删除的学生不存在!!!!!!!"<〈endl;
cout<<"您想继续删除吗?(y/n)";
cin〉〉c;
while(c!='y’&&c!='n’)
{
cout<〈”指令错误〈请输入y/n!>!!!!!!!”<〈endl;
cout〈<"您想继续删除吗?(y/n)";
cin>〉c;
}
}while(c==’y');
}
void get(student *head) //提取学生数据
{
student *p;
p=head;
int j=0;
string no;
cout<〈"请输入您想提取的学号前3位:";
cin〉>no;
string aa;
aa=int_char(p—>next—〉id);
while(p—>next!=NULL)
{
if(no==aa.substr(0,7))
{
cout〈〈"管理系统有您要提取的信息!”<〈endl;
j=1;
}
else p=p—>next;
if(j==1)
break;
}
if(j==1)
{
int c,m=0;
string b,b1,e,infoma[6]={"xueyuan”,"zhuanye”,”banji”,”daoshi”,”lunwen",”jiaquan”};
string kemu[6]={"学院","专业",”班级",”导师",”论文",”加权"};
cout<<”输入您想提取的信息代码:"<<endl;
cout〈〈”1-—〉学院 2—->专业 3—-〉班级"<<endl;
cout〈<”4—->导师 5—-〉论文 6——>加权"<<endl;
cout〈<”选择:”;
cin>〉c;
string cla=”class”;
e=no。substr(6,1);
b1=cla+e;
b=b1+infoma[c-1];
char *f=new char[20];
for(int i=0;i〈20;i++)
f[i]=b[i];
f=strcat(f,".txt”);
ofstream outfile(f,ios::out);
if(! outfile)
{
cout〈<"打开错误!!!!!!!"<<endl;
exit(1);
}
outfile〈<"\t您要提取的信息\t\t\t”<〈endl;
outfile〈<" ——-———--—-———--—————-——-—-—-—"〈<endl;
outfile<〈”| 学号 | 姓名 | ";
outfile〈〈kemu[c-1]〈<” |"<<endl;
while(p—>next!=NULL)
{
outfile<<" -—--————-——--—————-——-—--————"〈〈endl;
outfile〈<”|”〈〈setw(11)<〈p->next-〉id〈<” | ”〈<setw(6)〈<p->next—>name<〈” |";
switch(c)
{
case 1:outfile〈<setw(5)<<p->next->sc3.xy〈<" |”;
outfile<<endl;
break;
case 2:outfile<〈setw(5)<〈p->next—〉sc3。zy<<" |”;
outfile<〈endl;
break;
case 3:outfile〈<setw(5)<<p->next—>sc3。bj<<" |";
outfile〈<endl;
break;
case 4:outfile<<setw(5)〈<p—>next—〉sc3.teacher<<” |";
outfile〈〈endl;
break;
case 5:outfile<<setw(5)〈<p—〉next—〉sc3。lw〈<” |”;
outfile<〈endl;
break;
case 6:outfile〈〈setw(5)<〈p—>next-〉sc3.score<〈” |”;
outfile<〈endl;
break;
}
p=p—>next;
}
outfile〈〈" —————--—--—--——-—--———---————”<<endl;
outfile.close();
cout<〈"。.。...已经保存在”<<f<〈"文本文档中!”〈<endl;
}
if(j==0)
cout〈<"管理系统中没有您要提取的数据!!!!!!!!”<〈endl;
}
string int_char(int)
{
int a,b,i;
char
展开阅读全文