| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 359 人关注过本帖
标题:帮我改一下我的程序
只看楼主 加入收藏
sicheng106
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-11-26
结帖率:100%
收藏
已结贴  问题点数:2 回复次数:6 
帮我改一下我的程序
问题是:能保存全部学生信息,但只能打开一个学生。还有无法排序。

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#include<string.h>
static int m;
#define FUNC_CREATE        1
#define FUNC_OPEN        2
#define FUNC_SAVE        3
#define FUNC_INSERT        4
#define FUNC_DISPLAY    5
#define FUNC_DOMAX      6
#define    FUNC_DOSORT()   7
// add your function Macro here;
#define FUNC_QUIT        9

#define MAX_STUD_COUNT  30
#define N 5.0
// your data structure;
struct _student
{
    int ID;
    char Name[20];
    int Eng;
    int C_Language;
    int AdMaTH;
    int Computer;
    int Physics;
    float ave_score;
    int sum;
};

typedef struct _student STUD;

// Globle varibles;

STUD stud[MAX_STUD_COUNT+1];
// class id
int iClassID;
// student count in a class;
int iStudCount;

void PrintGreeting();
int PrintMainMenu();
void DoFunc(int);
void DoCreate();
void DoDisplay();
void DoSave();
void DoOpen();
void DoMax();
void DoQUIT();
//void DoInsert();
void DoSort();
void Doswap();
void main()
{
    int iChosedFuncId;
    PrintGreeting();
    for(;;)
    {
        iChosedFuncId = PrintMainMenu();
        //if (FUNC_QUIT == iChosedFuncId)
        //    break;
        if((iChosedFuncId >= FUNC_CREATE)
            &&(iChosedFuncId <= FUNC_QUIT))
            DoFunc(iChosedFuncId);
    }
    return ;
}

void DoFunc(int id)
{
///    int i;
    switch(id)
    {
    case FUNC_CREATE:
        DoCreate();
        //printf("Do create!\n");
        break;
    case FUNC_OPEN:
        DoOpen();
    //    printf("Do Open!\n");
        break;
    case FUNC_SAVE:
        //printf("Write to a Text file\n");
        DoSave(); /*循环写入数据*/
        printf("\t\t\t");
        system("pause");
        break;   
    case FUNC_INSERT:
        //DoInsert();
        //printf("Do insert!\n");
    //    break;
    case FUNC_DISPLAY:
        DoDisplay();
        break;
    case FUNC_DOMAX:
        DoMax();
        break;
    case FUNC_DOSORT():
        DoSort();
        break;
    // your case should continue;
    case FUNC_QUIT:
        DoQUIT();
        break;
    default:
        break;
    }
}

void DoDisplay()/*显示学生信息*/
{
    int i;

    if((iStudCount == 0)
        ||(iStudCount > MAX_STUD_COUNT)
        || (iClassID == 0))
    {   
        printf("请新建或者打开学生信息!按任意键继续:");
        scanf("%d",&i);
    }
    system("cls");
    printf("班级:%d\n",iClassID);
    printf("学生人数:%d\n",iStudCount);
    printf("%8s%15s%8s%8s%8s%8s%8s%8s%8s\n",
        "学号",  "姓名",  "英语","数学","C语言","计算机","物理","平均分","总分");

    for(i = 0; i < iStudCount; i++)
    {
        printf("%8d%15s%8d%8d%8d%8d%8d%8.2f%8d\n",
            stud[i].ID,
            stud[i].Name,
            stud[i].Eng,
            stud[i].AdMaTH,
            stud[i].C_Language,
            stud[i].Computer,
            stud[i].Physics,
            stud[i].ave_score,
            stud[i].sum);

    }

    printf("显示完成,请按任意键数字键返回主菜单:");
    scanf("%d",&i);
    return;
}

void DoCreate()/*新建一个班级*/
{
   
    int i;
    float m=N;
    float ave_score=0;
   
    system("cls");
    printf("     Main function--Create......\n");
    printf("输入班号(6位):");
    scanf("%d",&iClassID);
    printf("请输入学生人数(< %d):",MAX_STUD_COUNT);
    scanf("%d",&iStudCount);
   
    printf("   请依次输入学生信息, 格式如下:\n");
    printf("   学号  姓名  英语 数学 C语言 计算机 物理\n");

    for (i = 0; i < iStudCount; i++)
    {
        scanf("%d%s%d%d%d%d%d",
            &stud[i].ID,
            stud[i].Name,
            &stud[i].Eng,
            &stud[i].AdMaTH,
            &stud[i].C_Language,
            &stud[i].Computer,
            &stud[i].Physics);
        stud[i].sum=(stud[i].Eng+stud[i].AdMaTH +stud[i].C_Language+stud[i].Computer+stud[i].Physics);
        stud[i].ave_score=stud[i].sum/m;

    }

    printf("录入完成,请按任意键数字键返回主菜单:");
    scanf("%d",&i);
    return;
}


void DoMax() /*比较每个学生的总成绩*/
{
    int i;
    int max,min;

   
    for(i=0  ;i < iStudCount ;i++)
    {
        stud[i].sum=(stud[i].Eng+stud[i].AdMaTH +stud[i].C_Language+stud[i].Computer+stud[i].Physics);
    }
    min = stud[0].sum;
    max = stud[0].sum;
    for(i=0  ;i < iStudCount ;i++)
    {
        if(max<stud[i].sum)
             max = stud[i].sum;

        if(min>stud[i].sum)
            min = stud[i].sum;
    }
   
    for(i=0;i<iStudCount;i++)
    {
        if(max==stud[i].sum)
        {
            printf("总成绩最高学生的姓名 :%s \n",stud[i].Name);
            printf("总成绩最高学生的学号 :%d \n",stud[i].ID);
            printf("最高分数 :%d \n",stud[i].sum);
   
        }
        if(min==stud[i].sum)
        {
            printf("总成绩最低学生的姓名 :%s\n",stud[i].Name);
            printf("总成绩最低学生的学号 :%d \n",stud[i].ID);
            printf("最低分数 :%d \n",stud[i].sum);
        }

    }
    printf("比较完成,请按任意键数字键返回主菜单:");
    scanf("%d",&i);
    return ;
}




void DoSave( )//保存学生信息记录
{


    FILE* fp;
    int i,c=0;
    system("cls");

    printf("是否保存改记录(1/0)");
    scanf("%d",&c);
    if(c==1)
    {
        if((fp=fopen("aa.txt","wb"))==NULL)
        {
            printf("无发打开\n");
            return;
        }
        else
        {
            fwrite(&iStudCount,sizeof(struct _student),1,fp);
            fwrite(&iClassID,sizeof(struct _student),1,fp);
            for(i=0;i<iStudCount;i++)
            {
                fwrite(&stud[i],sizeof(struct _student),1,fp);
            }
            printf("保存成功\n");
            fclose(fp);
   
            return;
        }
    }
}
void DoOpen(struct _student*a,int n)
{
    int i;

    FILE* fp;
    if((fp=fopen("aa.txt","rb+"))==NULL)
    {
        printf("不能打开此文件\n");
        return;
    }
    fread(&iStudCount,sizeof(struct _student),1,fp);
    printf("学生人数:");
    printf("%d\n",iStudCount);
    fread(&iClassID,sizeof(struct _student),1,fp);
    printf("班级号:");
    printf("%d\n",iClassID);   
    printf("%8s%15s%8s%8s%8s%8s%8s%8s%8s\n",
        "学号",  "姓名",  "英语","数学","C语言","计算机","物理","平均分","总分");
    for(i = 0; i < iStudCount; i++)
    {
         printf("%8d%15s%8d%8d%8d%8d%8d%8.2f%8d\n",
            stud[i].ID,
            stud[i].Name,
            stud[i].Eng,
            stud[i].AdMaTH,
            stud[i].C_Language,
            stud[i].Computer,
            stud[i].Physics,
            stud[i].ave_score,
            stud[i].sum);
    }
 
    fclose(fp);
    printf("读取成功!\n");
    printf("打开完成,请按任意键数字键返回主菜单:");
    scanf("%d",&i);
    return;

}

void DoQUIT()
{
    int c;
    int i;

    printf("是否要退出系统(1/0)");
    scanf("%d",&c);
    if(c==1)
    {
        printf("系统将自动退出\n");
        printf("欢迎下次使用教学系统\n");
    }
    for(i=0;i<10;i++)
    {
        printf("......");
        _sleep(150);
    }
    exit(0) ;
}
/*void DoInsert()
{
    int i;
    int m;
    printf("请输入你要插入的学生的学号");
    scanf("%d",&ID);
    m=ID-1;
    for(i=0;i<inclass;i++)
    if(stud[i].ID==m)
    {
        
   
    }


}*/
void DoSort()
{
    int i,j,min;
   
    for(i=0 ;i < iStudCount-1 ;i++)
    {   
        min=i;
        for(j=i ;i < iStudCount ;j++)
        if(stud[i].ID<stud[j].ID )
        {
            min=j;
            //stud[j].ID =stud[i].ID;
            Doswap(&stud[i],&stud[j]);
        }
    }

}
void Doswap(int* a, int* b)
{
    int n;
    n=*a;
    *a=*b;
    *b=n;
}


void PrintGreeting()
{
    char ch;
    printf("########################################\n");
    printf("#                                      #\n");
    printf("#                                      #\n");
    printf("#                                      #\n");
    printf("#                                      #\n");
    printf("#           学生信息管理系统           #\n");
    printf("#                  V1.0                #\n");
    printf("#                                      #\n");
    printf("#                                      #\n");
    printf("#                                      #\n");
    printf("#                                      #\n");
    printf("#                                      #\n");
    printf("#    作者:yuanchao   日期10-11-20     #\n");
    printf("#                                      #\n");
    printf("#                                      #\n");
    printf("########################################\n");
    printf("请按任意键进入系统....");
    scanf("%c",&ch);
    return;
}

int PrintMainMenu()
{
    int iChosedID = 0;
    system("cls");
    printf("     Main function menu......\n");
    printf("1)  新建班级信息\n");
    printf("2)  从文件打开班级信息\n");
    printf("3)  将班级信息保存到文件\n");
    printf("4)  插入新的学生信息\n");
    printf("5)  显示班级学生信息\n");
    printf("6)  最大值\n");
    printf("7)  按学生学号排序\n");
    printf("9)  退出系统\n");

    printf("请输入您的选择(1..9):");
    scanf("%d",&iChosedID);
    return iChosedID;
}
2010-11-26 10:35
freedgun
Rank: 5Rank: 5
等 级:职业侠客
帖 子:147
专家分:302
注 册:2010-11-11
收藏
得分:1 
给2分  看这么多代码   下面的你干不干??

有什么样的付出,就有什么样的收获!!
2010-11-26 11:10
loveminttea
Rank: 3Rank: 3
来 自:河南科技学院
等 级:论坛游侠
帖 子:95
专家分:146
注 册:2010-10-14
收藏
得分:1 
我看不懂!帮不上忙啊...太多了.
2010-11-26 11:15
风仔
Rank: 2
等 级:论坛游民
帖 子:7
专家分:16
注 册:2010-11-25
收藏
得分:1 
我也是看不懂
2010-11-26 16:52
风仔
Rank: 2
等 级:论坛游民
帖 子:7
专家分:16
注 册:2010-11-25
收藏
得分:0 
我调了一下,主要是数据类型不对应,在申明那里,void Doswap(STUD *m,STUD *n);这样编释就能通过。
2010-11-26 17:20
sicheng106
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-11-26
收藏
得分:0 
回复 5楼 风仔
谢谢  我改好了
2010-11-26 23:44
sicheng106
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-11-26
收藏
得分:0 
回复 3楼 loveminttea
谢谢  我改好了
2010-11-26 23:45
快速回复:帮我改一下我的程序
数据加载中...
 
   



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

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