| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1022 人关注过本帖
标题:班级程序管理系统 还是有很多问题 感谢指点
只看楼主 加入收藏
lzzzz1990
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2007-8-6
收藏
 问题点数:0 回复次数:3 
班级程序管理系统 还是有很多问题 感谢指点
    摸索着自学了一段时间写了个程序,遇到了很多问题,调试 输入 输出,再调试......总算体会到程序猿的痛苦。
特别是cin的输入判断问题,我搜索了很久没有满意的答案,最后自己考虑用数组的形式来存储 判断。
程序还不完善,感谢各位大神查看,指点。
图片附件: 游客没有浏览图片的权限,请 登录注册


程序代码:
#include<iostream>
using namespace std;
struct zh
{
    char name[20];
    int yw;
    int sx;
    int yy;
    int sw;
    int hx;
}xs[100], px[100], *pp;
int I = 0;
char caidan();//菜单模块
void cjlr();//成绩录入模块
void cjxs();//成绩显示模块
void cjbc();//成绩保存模块
void cjpx();//成绩排序模块
void cjxg();//成绩修改模块
void cjtj();;//成绩统计模块
int srpd();//输入判断模块 返回输入值
int main()
{
top:char xz;
    xz = caidan();
    switch (xz)
    {
    case 'a':cjlr(); goto top;
    case 'b':cjxs(); goto top;
    case 'c':cjbc(); goto top;
    case 'd':cjpx(); goto top;
    case 'e':cjxg(); goto top;
    case 'f':cjtj(); goto top;
    case 'g':break;
    default:
        cout << "错误";;
        break;
    }
}

char caidan()
{

    char a[50];
    system("cls");
    cout << endl;
    cout << "\t\t\t班级成绩管理系统" << endl;
    cout << "\t请选择系统功能项:(输入前面的字母)" << endl << endl;
    cout << "a.成绩录入" << endl;
    cout << "b.成绩显示" << endl;
    cout << "c.成绩保存" << endl;
    cout << "d.成绩排序" << endl;
    cout << "e.成绩修改" << endl;
    cout << "f.成绩统计" << endl;
    cout << "g.退出系统" << endl << endl;
    cout << "请输入您的选择:";
    cin >> a;
    while (1)                                        //采用字符组判断输入的是否正确 不重复 不带多个字符
    {
        if (a[0] >= 'A'&& a[0] <= 'G')
        {
            a[0] += 32;
        }
        if (a[0] < 'a' || a[0]>'g' || a[1] != '\0')
        {
            cout << "输入错误,请重新输入:";
            cin >> a;
        }
        else
        {
            break;
        }

    }
    return (a[0]);
}

void cjlr()
{
top2:char a[20];
    system("cls");
    cout << endl;
    cout << "\t\t\t班级成绩管理系统" << endl;
    cout << "\t成绩录入模块" << endl << endl;
    cout << "请输入姓名:";
    cin >> xs[I].name;
    cout << "请输入语文成绩:";
    xs[I].yw = srpd();
    cout << "请输入数学成绩:";
    xs[I].sx = srpd();
    cout << "请输入英语成绩:";
    xs[I].yy = srpd();
    cout << "请输入生物成绩:";
    xs[I].sw = srpd();
    cout << "请输入化学成绩:";
    xs[I].hx = srpd();
    cout << "是否继续输入下个学生(Y/N):";
    cin >> a;
    while (1)                                        //采用字符组判断输入的是否正确 不重复 不带多个字符
    {
        if (a[0] == 'Y' || a[0] == 'N')
        {
            a[0] += 32;
        }
        if (a[0] != 'y' && a[0] != 'n')
        {
            cout << "输入错误,请重新输入:";
            cin >> a;
            continue;
        }
        if (a[1] != '\0')
        {
            cout << "输入错误,请重新输入:";
            cin >> a;
        }
        else if (a[0] == 'y')
        {
            I++;
            goto top2;
        }
        else
            I++;
        break;
    }
}

void cjxs()
{
    int i = 0;
    system("cls");
    cout << endl;
    cout << "\t\t\t班级成绩管理系统" << endl;
    cout << "\t成绩显示模块" << endl << endl;
    cout << "序号\t" << "姓名\t" << "语文\t" << "数学\t" << "英语\t" << "生物\t" << "化学\t" << endl;
    //for (int i = 0; i < length; i++)
    while (xs[i].name[0] != '\0')
    {
        cout << i << "\t" << xs[i].name << "\t" << xs[i].yw << "\t" << xs[i].sx << "\t" << xs[i].yy << "\t" << xs[i].sw << "\t" << xs[i].hx << "\t" << endl;
        i++;
    }
    system("pause");
}

void cjbc()
{
    FILE *fp;
    errno_t err;
    int i = 0;
    pp = xs;
    system("cls");
    cout << endl;
    cout << "\t\t\t班级成绩管理系统" << endl;
    cout << "\t成绩显示模块" << endl << endl;
    if ((err = fopen_s(&fp, "学生成绩.txt", "wt+")) != 0)
        cout << "无法打开此文件";            //如果打不开,就输出打不开
    while (xs[i].name[i] != '\0')
    {
        fwrite(&xs[i], sizeof(struct zh), i, fp);
        i++;
    }
    cout << "保存成功" << endl;
    fclose(fp);                                //关闭文件
    system("pause");
}

void cjpx()
{
    system("cls");
    cout << endl;
    cout << "\t\t\t班级成绩管理系统" << endl;
    cout << "\t成绩排序模块" << endl << endl;
    int i = 0, a, b, c, j = 0;
    while (xs[i].name[0] != '\0')
    {
        px[i].yw = xs[i].yw;
        px[i].sx = xs[i].sx;
        px[i].yy = xs[i].yy;
        px[i].sw = xs[i].sw;
        px[i].hx = xs[i].hx;
        i++;

    }
    for (a = 0; a < i - 1; a++)
    {
        for (b = 0; b < i - 1 - a; b++)
        {
            if (px[b].yw > px[b + 1].yw)
            {
                c = px[b].yw;
                px[b].yw = px[b + 1].yw;
                px[b + 1].yw = c;
            }
            if (px[b].sx > px[b + 1].sx)
            {
                c = px[b].sx;
                px[b].sx = px[b + 1].sx;
                px[b + 1].sx = c;
            }
            if (px[b].yy > px[b + 1].yy)
            {
                c = px[b].yy;
                px[b].yy = px[b + 1].yy;
                px[b + 1].yy = c;
            }
            if (px[b].sw > px[b + 1].sw)
            {
                c = px[b].sw;
                px[b].sw = px[b + 1].sw;
                px[b + 1].sw = c;
            }
            if (px[b].hx > px[b + 1].hx)
            {
                c = px[b].hx;
                px[b].hx = px[b + 1].hx;
                px[b + 1].hx = c;
            }
        }

    }
    cout << "序号\t" << "语文\t" << "数学\t" << "英语\t" << "生物\t" << "化学\t" << endl;
    while (j < i)
    {

        cout << j << "\t" << px[j].yw << "\t" << px[j].sx << "\t" << px[j].yy << "\t" << px[j].sw << "\t" << px[j].hx << "\t" << endl;
        j++;
    }
    system("pause");

}

void cjxg()
{
top3:char a[20], b[20];
    int i, j = 0, k, pd;
    system("cls");
    cout << endl;
    cout << "\t\t\t班级成绩管理系统" << endl;
    cout << "\t成绩修改模块" << endl << endl;
    cout << "请输入所需修改学生的名字:";
    cin >> a;
    while (a[j] != '\0')
    {
        j++;
    }
    for (i = 0; i <= I; i++)
    {
        pd = 0;
        for (k = 0; k <= j; k++)
        {
            if (xs[i].name[k] == a[k]) pd = 1;
            else
            {
                pd = 0;
                break;
            }
        }
        if (pd)
        {
            break;
        }
    }
    if (pd)
    {
        cout << "请修改语文成绩:";
        xs[i].yw = srpd();
        cout << "请修改数学成绩:";
        xs[i].sx = srpd();
        cout << "请修改英语成绩:";
        xs[i].yy = srpd();
        cout << "请修改生物成绩:";
        xs[i].sw = srpd();
        cout << "请修改化学成绩:";
        xs[i].hx = srpd();
    }
    else
    {
        cout << "查无此人" << endl;
    }
    cout << "是否继续输入下个学生(Y/N):";
    cin >> b;
    while (1)                                        //采用字符组判断输入的是否正确 不重复 不带多个字符
    {
        if (b[0] == 'Y' || b[0] == 'N')
        {
            b[0] += 32;
        }
        if (b[0] != 'y' && b[0] != 'n')
        {
            cout << "输入错误,请重新输入:";
            cin >> b;
            continue;
        }
        if (b[1] != '\0')
        {
            cout << "输入错误,请重新输入:";
            cin >> b;
        }
        else if (b[0] == 'y')
        {
            I++;
            goto top3;
        }
        else
            break;
    }
}

void cjtj()
{
    double b[5] = {0};
    int i;
    system("cls");
    cout << endl;
    cout << "\t\t\t班级成绩管理系统" << endl;
    cout << "\t成绩统计模块" << endl << endl;
    cout << "\t" << "  语文\t" << "  数学\t" << "  英语\t" << "  生物\t" << "  化学\t" << endl;
    for ( i = 0; i <=I; i++)
    {
        b[0] += xs[i].yw;
    }
    for (i = 0; i <= I; i++)
    {
        b[1] += xs[i].sx;
    }
    for (i = 0; i <= I; i++)
    {
        b[2] += xs[i].yy;
    }
    for (i = 0; i <= I; i++)
    {
        b[3] += xs[i].sw;
    }
    for (i = 0; i <= I; i++)
    {
        b[4] += xs[i].hx;
    }
    b[0] /= I;
    b[1] /= I;
    b[2] /= I;
    b[3] /= I;
    b[4] /= I;
    cout <<"平均成绩:\t" << b[0] << "\t" << b[1] << "\t" << b[2] << "\t" << b[3] << "\t" << b[4] << "\t"<<endl;
    system("pause");
}

int srpd()
{
    char a[20];
    int b = -1, i = 1;
    cin >> a;
    while (1)
    {

        if (a[1] != '\0' && a[2] != '\0'&&a[3] != '\0')
        {
            cout << "输入错误,请重新输入:";
            cin >> a;
            continue;
        }
        while (a[i] != '\0')
        {
            i++;
        }
        switch (i)
        {
        case 1:
            if (a[0]<'0' || a[0]>'9')
            {
                break;
            }
            b = int(a[0]) - 48;
            break;
        case 2:
            if (a[0]<'0' || a[0]>'9')
            {
                break;
            }
            else if (a[1]<'0' || a[1]>'9')
            {
                break;
            }
            b = (int(a[0]) - 48) * 10;
            b = b + (int(a[1]) - 48);
            break;
        case 3:
            if (a[0]<'0' || a[0]>'9')
            {
                break;
            }
            else if (a[1]<'0' || a[1]>'9')
            {
                break;
            }
            else if (a[2]<'0' || a[2]>'9')
            {
                break;
            }
            b = (int(a[0]) - 48) * 100;
            b = b + (int(a[1]) - 48) * 10;
            b = b + (int(a[2]) - 48);
            break;
        default:
            cout << "致命错误:" << endl;
            break;
        }
        if (b >= 0 && b <= 100)
            break;
        else
        {
            cout << "输入错误,请重新输入:";
            cin >> a;
            i = 1, b = -1;
        }
    }
    return b;
}
搜索更多相关主题的帖子: 输入 int 成绩 break cout 
2018-12-11 22:33
lxk1732942
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:450
专家分:425
注 册:2018-9-4
收藏
得分:0 
首先,你来错地方了,这里是c,你应该去c++;
其次,程序有什么问题,为什么不说明?难道要让别人帮你检测?
2018-12-12 15:23
lxk1732942
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:450
专家分:425
注 册:2018-9-4
收藏
得分:0 
首先,你来错地方了,这里是c,你应该去c++;
其次,程序有什么问题,为什么不说明?难道要让别人帮你检测?
2018-12-12 15:23
lzzzz1990
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2007-8-6
收藏
得分:0 
回复 3楼 lxk1732942
2018-12-12 19:38
快速回复:班级程序管理系统 还是有很多问题 感谢指点
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032189 second(s), 12 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved