麻烦大家帮我修改一下我的课程设计,学生成绩管理系统
程序能运行,但存在很多问题,我实在是找不出来了,麻烦大家来帮我找找,我在这里感激不尽了。程序如下:
/*一、设计要求:
利用面向对象的设计方法,即封装、继承和多态技术,实现对学生成绩表:
1)建立:采用顺序存储结构。 2)插入 3)删除
4)排序:直接插入排序 5)查找:折半查找。 6)浏览
7)统计计算(计算每门课的总分、平均成绩)
二、类设计
人员类person:(编号,姓名,性别;输入,浏览)。
学生类student:继承person,增加成绩,输入,浏览。
学生表类stulist:(学生类数组;输入,浏览,插入,删除,排序,查找,统计计算)
输入、浏览用多态实现。
三、设计方法
以上是一个初步的设计,具体设计时再作调整。通过查阅资料,相互讨论,完成设计,最后交设计报告。
四、设计计划
星期一:阅读、查资料,实现表结构,数据成员,成绩表的建立和浏览。
星期二:记录的插入、删除实现 星期三:记录的排序、查找实现
星期四:程序的完整实现和调试。 星期五:写实验报告并上传。
五、课程设计报告格式
1)封面:题目,姓名,指导教师,日期 2)设计的目的及意义 3)设计的理论和实现的方法
4)设计的特点 5)设计中的问题 6)程序清单*/
#include<iostream.h>
#include<stdio.h>
#include<string.h>
struct stud
{
int nu;
char name[10];
char xb[2];
int dj1;
int dj2;
int dj3;
int sum;
};
class Person
{
protected:
int nu;
char name[10];
char xb[2];
public:
void setdata(int n,char na[],char x[])
{
nu=n;
strcpy(name,na);
strcpy(xb,x);
}
void show()
{
cout<<nu<<" "<<name<<" "<<xb<<" ";
}
friend class Stulist;
};
class Student
{
protected:
int nu;
char name[10];
char xb[2];
int dj1,dj2,dj3;
public:
void setstu(int n,char na[],char x[],int d1,int d2,int d3)
{
nu=n;
strcpy(name,na);
strcpy(xb,x);
dj1=d1;
dj2=d2;
dj3=d3;
}
void show()
{
cout<<dj1<<" "<<dj2<<" "<<dj3;
}
friend class Stulist;
};
class Stulist
{
private:
int i;
stud stu[50];
public:
void set(int n,char na[],char x[],int d1,int d2,int d3,int i)
{
stu[i].nu=n;
strcpy(stu[i].name,na);
strcpy(stu[i].xb,x);
stu[i].dj1=d1;
stu[i].dj2=d2;
stu[i].dj3=d3;
stu[i].sum=stu[i].dj1+stu[i].dj2+stu[i].dj3;
}
void show(int i)
{
cout<<stu[i].nu<<" "<<stu[i].name<<" "<<stu[i].xb
<<" "<<stu[i].dj1<<" "<<stu[i].dj2<<" "<<stu[i].dj3<<endl;
}
void insert(int i)
{
int n,d1,d2,d3,j;
char na[10],x[2];
cout<<"请输入需要插入记录的数据:"<<endl;
cout<<"编号 姓名 性别 数据结构 C++ 计算机组成原理: "<<endl;
cin>>n>>na>>x>>d1>>d2>>d3;
stu[i+1].nu=n;
strcpy(stu[i+1].name,na);
strcpy(stu[i+1].xb,x);
stu[i+1].dj1=d1;
stu[i+1].dj2=d2;
stu[i+1].dj3=d3;
i=i+1;
cout<<"学生表数据输出\n"<<"编号 姓名 性别 数据结构 C++ 计算机组成原理: "<<endl;
for(j=0;j<i+1;j++)
{
show(j);
}
}
void del(int t)
{
int m,i,j;
char x;
cout<<"请输入需要删除记录的编号:"<<endl;
cin>>m;
for(i=0;i<t;i++)
{
if(stu[i].nu!=m)
{
cout<<"对不起,没有此学生的信息!"<<endl;
break;
}
else
{
cout<<"编号 姓名 性别 数据结构 C++ 计算机组成原理:"<<endl;
cout<<stu[i].nu<<" "<<stu[i].name<<" "<<stu[i].xb
<<" "<<stu[i].dj1<<" "<<stu[i].dj2<<" "<<stu[i].dj3<<endl;
cout<<"你确定要删除此学生信息么?(y/n)"<<endl;
cin>>x;
if(x=='y'||x=='Y')
{
for(int j=i;j<=t;j++)
{
stu[j].nu=stu[j+1].nu;
strcpy(stu[j].name,stu[j+1].name);
strcpy(stu[j].xb,stu[j+1].xb);
stu[j].dj1=stu[j+1].dj1;
stu[j].dj2=stu[j+1].dj2;
stu[j].dj3=stu[j+1].dj3;
}
cout<<"该学生记录已经删除"<<endl;
for(i=0;i<t-1;i++)
{
show(i);
}
}
else
cout<<"执行下一级命令"<<endl;
}
break;
}
}
void rearch(int t)
{
int m,i;
char x;
cout<<"请输入需要查询记录的编号:"<<endl;
cin>>m;
for(i=0;i<t;i++)
{
if(stu[i].nu!=m)
{
cout<<"对不起,没有此学生的信息!"<<endl;
break;
}
else
{
cout<<"编号 姓名 性别 数据结构 C++ 计算机组成原理:"<<endl;
cout<<stu[i].nu<<" "<<stu[i].name<<" "<<stu[i].xb
<<" "<<stu[i].dj1<<" "<<stu[i].dj2<<" "<<stu[i].dj3<<endl;
}
break;
}
}
void sort(int t)
{
cout<<"因为目前程序并不完善,所以只提供按总分排序,请见谅!"<<endl;
int a[50],i,j,x;
for(i=0;i<t;i++)
{
a[i]=stu[i].sum;
}
for(i=0;i<t;i++)
for(j=0;j<t-i;j++)
if(a[j]<a[j+1])
{
x=a[j];
a[j]=a[j+1];
a[j+1]=x;
}
for(i=0;i<t;i++)
for(j=0;j<t;j++)
if(a[i]==stu[j].sum)
{
cout<<stu[i].nu<<" "<<stu[i].name<<" "<<stu[i].xb
<<" "<<stu[i].dj1<<" "<<stu[i].dj2<<" "<<stu[i].dj3<<endl;
}
}
};
void sc()
{
cout<<" 欢迎使用学生管理系统1.7版"<<endl;
cout<<" 张若愚,李师林"<<endl;
cout<<"按回车键继续。。。"<<endl;
}
void main()
{
sc();
getchar();
Person pe[50];
Student st[50];
Stulist xs;
int i,j,t;
int n,cj1,cj2,cj3;
char na[10],sex[2],a;
cout<<"您有几条学生记录需要输入:"<<endl;
cin>>t;
cout<<"输入数据\n"<<"编号 姓名 性别 数据结构 C++ 计算机组成原理: "<<endl;
for(i=0;i<t;i++)
{
cin>>n>>na>>sex;
pe[i].setdata(n,na,sex);
cin>>cj1>>cj2>>cj3;
st[i].setstu(n,na,sex,cj1,cj2,cj3);
xs.set(n,na,sex,cj1,cj2,cj3,i);
}
cout<<"人员数据输出\n"<<"编号 姓名 性别: "<<endl;
for(j=0;j<t;j++)
{
pe[j].show();
cout<<endl;
}
cout<<"学生成绩输出\n"<<"数据结构 C++ 计算机组成原理: "<<endl;
for(j=0;j<t;j++)
{
st[j].show();
cout<<endl;
}
cout<<"学生表数据输出\n"<<"编号 姓名 性别 数据结构 C++ 计算机组成原理: "<<endl;
for(i=0;i<t;i++)
{
xs.show(i);
}
cout<<"用户需要插入数据么?(y/n)"<<endl;
cin>>a;
if(a=='y'||a=='Y')
{
xs.insert(t);
t=t+1;
cout<<"执行下一级命令"<<endl;
}
else
cout<<"执行下一级命令"<<endl;
cout<<"用户需要删除数据么?(y/n)"<<endl;
cin>>a;
if(a=='y'||a=='Y')
{
xs.del(t);
t=t-1;
cout<<"执行下一级命令"<<endl;
}
else
cout<<"执行下一级命令"<<endl;
cout<<"用户需要查询数据么?(y/n)"<<endl;
cin>>a;
if(a=='y'||a=='Y')
{
xs.rearch(t);
cout<<"执行下一级命令"<<endl;
}
else
cout<<"执行下一级命令"<<endl;
cout<<"用户需要给数据排序么?(y/n)"<<endl;
cin>>a;
if(a=='y'||a=='Y')
{
xs.sort(t);
cout<<"执行下一级命令"<<endl;
}
else
cout<<"执行下一级命令"<<endl;
}
实在是谢谢了!