zry11222 发表于 2008-7-9 20:13

麻烦大家帮我修改一下我的课程设计,学生成绩管理系统

程序能运行,但存在很多问题,我实在是找不出来了,麻烦大家来帮我找找,我在这里感激不尽了。

程序如下:

/*一、设计要求:
利用面向对象的设计方法,即封装、继承和多态技术,实现对学生成绩表:
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;
}

实在是谢谢了!

zezhi821 发表于 2008-7-10 13:43

我是入门者,看了一眼,那个i重复定义了,其他没时间去看,现在是考试时间,找高手帮忙吧![tk01]

hitxinyu 发表于 2008-7-17 22:00

没仔细看,
        for(i=0;i<t;i++)
        {
            if(stu[i].nu!=m)
            {
                cout<<"对不起,没有此学生的信息!"<<endl;
                break;
            }
            else

这里有问题。
不应该不匹配就break。
应该continue

页: [1]

编程论坛