| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1198 人关注过本帖
标题:关于C语言学生管理系统的求助!!
只看楼主 加入收藏
拿铁不加糖
Rank: 1
等 级:新手上路
帖 子:6
专家分:4
注 册:2010-9-9
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
关于C语言学生管理系统的求助!!
请教高手怎么解决下面这个程序不能修改信息的问题。还有就是就是这个程序在显示班级的时候会把级别和专业这两项合并。求解决办法。谢谢了。

#include<stdio.h>

#include<string.h>

struct student       //一条学生记录包含的信息//

{

char xuehao[10];        //编号//

char xingming[10];       //班级//

char xingbie[2];        //级别//   

char shengri[10];        //专业//

char zhuanye[20];        //班主任//

char banji[4];         //总人数//   

char jiatingdizhi[20];       //男生人数//

char sushehaoma[4];       //女生人数//

};

 

struct student stu[100];   //定义可容纳100条记录的结构体数组//


void save()   //保存函数//

{

FILE *fp;

int i;

if((fp=fopen("xueshengxinxi","w+"))==NULL)

   {

    printf("cannot open file\n");

    return;

   }

for(i=0;i<100;i++)

     if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)

        printf("file write error\n");

fclose(fp);

}

void function_1()          //浏览所有学生的信息//

{

int i;

FILE *fp;

fp=fopen("xueshengxinxi","rb");

printf("编号");   

printf("\t班级");

printf("\t级别");

printf("\t 专业");

printf("\t 班主任");

printf("\t 总人数");

printf("\t       男生人数");

printf("\t       女生人数");

for(i=0;i<5;i++)

    {

     fread(&stu[i],sizeof(struct student),1,fp);

     printf("\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s",

                  stu[i].xuehao,stu[i].xingming,stu[i].xingbie,

                     stu[i].shengri,stu[i].zhuanye,stu[i].banji,

                     stu[i].jiatingdizhi,stu[i].sushehaoma);

    }

fclose(fp);

}

int function_2()             //添加学生信息//

{

int i=0;

char MM='Y';

while(MM=='Y'&&i<100)

     {

      printf("\n请输入第%d个班级的相关信息\n",i+1);

      printf("编号:     ");   scanf("%s",stu[i].xuehao);

      printf("班级:     ");   scanf("%s",stu[i].xingming);

      printf("级别:     ");   scanf("%s",stu[i].xingbie);

      printf("专业:     ");   scanf("%s",stu[i].shengri);

      printf("班主任:   ");   scanf("%s",stu[i].zhuanye);

      printf("总人数:   ");   scanf("%s",stu[i].banji);

      printf("男生人数:");   scanf("%s",stu[i].jiatingdizhi);

      printf("女生人数: ");   scanf("%s",stu[i].sushehaoma);
      i=i+1;

      getchar();

      printf("\n是否继续添加信息?y/n     ");
      MM=getchar();

      save();

     }

return(i);

}

 

void function_3()          //查找学生信息//

{

int i,k=0;

char MVP='Y',XH[10],XM[10];

FILE *fp;

fp=fopen("xueshengxinxi","r");

while(MVP=='Y')

      {

        

          printf("1---按编号查找\n");

          printf("2---按班级名查找\n");

         printf("\n请根据操作项所对应的数字进行选择:     ");

       scanf("%d",&i);

       while(i>2||i<1)

            {

                printf("\n选择有误,请重新选择     ");

             scanf("%d",&i);

            }

       if(i==1)

         {

          printf("\n请输入编号:   ");

          scanf("%s",XH);

          while(k<5)

               {

                   if(strcmp(XH,stu[k].xuehao)==0)

                   break;

                k=k+1;

               }

          if(k<5)

             {

                 printf("\n该班级的信息为\n");

              printf("编号:     %s\n",stu[k].xuehao);

                       printf("班级:     %s\n",stu[k].xingming);

                       printf("级别:     %s\n",stu[k].xingbie);

                       printf("专业:     %s\n",stu[k].shengri);

                       printf("班主任:     %s\n",stu[k].zhuanye);

                       printf("总人数:     %s\n",stu[k].banji);

                       printf("男生人数:     %s\n",stu[k].jiatingdizhi);

                       printf("女生人数:     %s\n",stu[k].sushehaoma);

             }

           else

                  printf("\n对应的班级信息不存在\n\n");

         }

       else

           {

               printf("\n请输入班级名:   ");

            scanf("%s",XM);

            while(k<5)

                 {

                     if(strcmp(XM,stu[k].xingming)==0)

                     break;

                  k=k+1;

                 }

            if(k<5)

              {

                  printf("\n该班级的信息为\n");

               printf("编号:     %s\n",stu[k].xuehao);

                        printf("班级:     %s\n",stu[k].xingming);

                        printf("级别:     %s\n",stu[k].xingbie);

                        printf("专业:     %s\n",stu[k].shengri);

                        printf("班主任:     %s\n",stu[k].zhuanye);

                        printf("总人数:     %s\n",stu[k].banji);

                        printf("男生人数:     %s\n",stu[k].jiatingdizhi);

                        printf("女生人数:     %s\n",stu[k].sushehaoma);      

              }

            else

                   printf("\n对应的班级信息不存在\n\n");

           }

       getchar();

       printf("\n\n是否继续查找?y/n ");

       MVP=getchar();

      }

fclose(fp);

}

void function_4()          //修改学生信息//

{

int i=0,k=0;

char ZHY,XH[10],code[10];

FILE *fp;

fp=fopen("xueshengxinxi","r");


printf("\n请输入编号:   ");

scanf("%s",XH);

while(k<5)

   {

    if(strcmp(XH,stu[k].xuehao)==0)

       break;

    k=k+1;

   }


       {

           printf("确定要修改信息吗?y/n ");

           ZHY=getchar();

           if(ZHY=='Y')

          {

           printf("请输入班级信息\n");

           printf("编号:   "); scanf("%s",stu[k].xuehao);

           printf("班级:   "); scanf("%s",stu[k].xingming);

           printf("级别:   "); scanf("%s",stu[k].xingbie);

           printf("专业:   "); scanf("%s",stu[k].shengri);

           printf("班主任:   "); scanf("%s",stu[k].zhuanye);

           printf("总人数:   "); scanf("%s",stu[k].banji);

           printf("男生人数:   "); scanf("%s",stu[k].jiatingdizhi);

           printf("女生人数:   "); scanf("%s",stu[k].sushehaoma);

              save();           

          }        

       }

    }   


void main()            //主函数//

{

int i,N=0;             //N条记录//

char kobe='Y';


printf("\n\n              ===============欢迎使用班级管理系统===============\n\n");


while(kobe=='Y')

       {

        printf("\n                              1-浏览所有班级的信息\n");
         
        printf("\n                              2-添加班级新信息\n");
         
        printf("\n                              3-查找班级信息\n");
           
        printf("\n                              4-修改班级信息\n");
        printf("\n               =================================================\n");

        printf("\n\n                        请根据操作项所对应的数字进行选择:");

        scanf("%d",&i);

        while(i>4||i<1)

             {

                 printf("\n选择有误,请重新选择:     ");

              scanf("%d",&i);

             }

        if(i==1) function_1();

        else

                if(i==2) N=function_2();

        else

                if(i==3) function_3();

        else function_4();

        getchar();

        printf("\n\n\n是否返回主界面?y/n     ");

        kobe=getchar();

       }

printf("\n共有%d条记录\n",N);

printf("\n\n");


printf("   谢谢访问 再见   ");


}

搜索更多相关主题的帖子: C语言 系统 学生 管理 
2010-12-15 19:58
yanjie3155
Rank: 3Rank: 3
来 自:湖北黄冈
等 级:论坛游侠
帖 子:80
专家分:145
注 册:2010-3-8
收藏
得分:10 
强大
2010-12-15 20:33
拿铁不加糖
Rank: 1
等 级:新手上路
帖 子:6
专家分:4
注 册:2010-9-9
收藏
得分:0 
回复 2楼 yanjie3155
能否解答一下!
2010-12-15 20:36
拿铁不加糖
Rank: 1
等 级:新手上路
帖 子:6
专家分:4
注 册:2010-9-9
收藏
得分:0 
顶呀!求办法。
2010-12-16 11:20
FMaster
Rank: 2
等 级:论坛游民
帖 子:63
专家分:62
注 册:2010-9-1
收藏
得分:10 
这是俺老师叫做时我弄的,不过没添加文件。。。。。。。。。。
程序代码:
#include<stdio.h>
#include<stdlib.h>        //为exit()声明,否则会警告
#define _Cou 3            //科目数
#define _Str 20           //本班最大可达到的人数
void In();
void Out();
void Order();
void Amend();
void Add();
void Abate();
struct stu
{
    int _Nnmber;
    char _No[20];
    char _Name[10];
    char _Sex;
    float score[_Cou+1]; 
}str[_Str],Occasion;
int a=0,b,c,d,e;         //仅仅5个全局变量
char * Subjec[_Cou]={"英语","数学","计算机"};     //科目的数量需与COU保持一致,更改科目的话,需更改COU
main()                //不解释
{
    printf("本班学生总数:");
    scanf("%d",&c);
    In();
    system("cls");
    printf("输入如下:\n");
    Out();
    while(1)
    {
        printf("\t1.查询信息 2.增加学生 3.删除学生\n\t4.修改信息 5.总分排序 6.退出系统\n");
        scanf("%d",&d);
        switch(d)
        {
            case 1:
                system("cls");
                printf("\t---学生成绩如下---\n\n");
                d=0;
                Out();
                break;               
            case 2:
                system("cls");
                printf("\t---学生成绩增加---\n\n");
                Add();
                Out();
                break;
            case 3:
                system("cls");
                printf("\t---学生成绩删除---\n\n");
                Out();
                Abate();
                Out();
                break;
            case 4:
                system("cls");
                printf("\t---学生成绩修改---\n\n");
                Out();
                Amend();
                d=0;
                Out();
                break;               
            case 5:
                system("cls");
                printf("\t---学生成绩总分排序---\n\n");
                Order();
                Out();
                break;
            case 6:
                exit(0);
            default:
                printf("输入错误!\n");
        }
    }
}
void In()             //控制一切的输入,即使是增加,但不控制更改
{
    e=1;
    for(;a<c;a++,e++)
    {
        printf("第%d名:\n",e);
        fflush(stdin);
        printf("输入学号:");
        gets(str[a]._No);
        printf("输入姓名:");
                fflush(stdin);
        gets(str[a]._Name);
        fflush(stdin);
        printf("输入性别:(男:m/M 女:n/N)");
        scanf("%c",&str[a]._Sex);
        fflush(stdin);
        str[a].score[_Cou]=0;
        for(b=0;b<_Cou;b++)
        {
            printf("输入%s成绩:",*(Subjec+b));
            scanf("%f",&str[a].score[b]);
            str[a].score[_Cou]+=str[a].score[b];
        }
    }
}
void Out()           //一切的输出
{
    printf("    %-8s%-8s%-8s","学号","姓名","性别");
    for(a=0;a<_Cou;a++)
        printf("%-8s",*(Subjec+a));
    printf("%-8s%-8s\n","总分","平均分");
    for(a=0;a<c;a++)
    {
        str[a]._Nnmber=a+1;
        printf("%-3d:",str[a]._Nnmber);
        printf("%-8s%-8s%-8c",str[a]._No,str[a]._Name,str[a]._Sex);
        for(b=0;b<_Cou+1;b++)
            printf("%-8.2f",str[a].score[b]);
        printf("%-8.2f\n",str[a].score[_Cou]/_Cou);
        if(d==1)
            break;
    }
}
void Add()
{
    printf("输入要增加的学生数:");
    scanf("%d",&d);
    c+=d;
    a=c-d;
    In();
    d=0;
}
void Abate()
{
    printf("输入要删除的序号数:");
    scanf("%d",&e);
    for(a=0;a<c-e;a++)
        str[e-1+a]=str[e+a];
    c-=1;
}
void Amend()
{
    printf("输入要修改的序号:");
    scanf("%d",&e);
    for(a=0;a<c;a++)
        if(str[a]._Nnmber==e)
        {
            printf("学生原信息为:\n");
            d=1;
            Out();
            break;
        }
    printf("输入你要的修改什么?\n");
    while(d)
    {
    printf("0.退出修改 1.学号 2.姓名 3.性别 ");
    for(a=0;a<_Cou;a++)
    {
        printf("%d.",a+4);
        printf("%s ",*(Subjec+a));
    }
    putchar('\n');
    scanf("%d",&a);
    switch(a)
    {
    case 0:
        d=0;
        continue;
    case 1:
        printf("输入学号:");
        scanf("%s",&str[e-1]._No);
        Out();
        continue;
    case 2:
        printf("输入姓名:");
        scanf("%s",&str[e-1]._Name);
        Out();
        continue;
    case 3:
        printf("输入性别:(男:m/M女:n/N)");
        scanf("%s",&str[e-1]._Sex);
        Out();
        continue;
    }
    if(a<=_Cou+3 && a>3)
    {
        printf("输入%s成绩:",*(Subjec+a-4));
        str[e-1].score[_Cou]-=str[e-1].score[a-4];
        scanf("%f",&str[e-1].score[a-4]);
        str[e-1].score[_Cou]+=str[e-1].score[a-4];
    }else
        printf("输入错误!\n");
    Out();
    }
}
void Order()         //排序换位
{
    for(a=0;a<c-1;a++)
        for(b=a+1;b<c;b++)
            if(str[a].score[_Cou]<str[b].score[_Cou])
            {
                Occasion=str[a];
                str[a]=str[b];
                str[b]=Occasion;
            }
}
返回主页面你怎么就直接退出了?我还想返回主页面在干点别的事哪、。。。。

[ 本帖最后由 FMaster 于 2010-12-16 13:40 编辑 ]
2010-12-16 13:36
快速回复:关于C语言学生管理系统的求助!!
数据加载中...
 
   



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

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