标题:大家帮我看下这个程序,谢谢了
只看楼主
Dev1il
Rank: 2
等 级:论坛游民
帖 子:36
专家分:45
注 册:2010-3-15
结帖率:40%
已结贴  问题点数:20 回复次数:5 
大家帮我看下这个程序,谢谢了
我写了一个班级管理软件,写了部分代码
代码如下:
#include <stdio.h>
#include <conio.h> //去字符getch()
#include <windows.h> //system函数
#include <process.h> //exit函数
#include <string.h>
#include <malloc.h>
#define NULL 0
#define M 50
typedef struct
{
    char xuehao[30];
    char xingming[30];
    char xinbie;
    char kongge; /*接受缓冲区的空格*/
}student;
typedef struct
{
    char xuehao[10];
    char xingming[10];
    int yuwen;
    int shuxue;
    int yingyu;
    int sjjgou; /*数据结构*/
    int java;
    int zzwf;/*组装维护*/
    int sql; /*SQL*/
    int tiyu;/*体育*/
}chengji;
/*密码函数声明*/
void mima(char mima[6]);//输入密码
void xinmima(FILE *fp); //修改密码
/*菜单函数声明*/
int menu_list();/*总菜单*/
void menu_list1();/*学生信息查询子菜单*/
int menu_list2();/*学生成绩查询子菜单*/
void menu_list3();/*登录信息修改子菜单*/
void menu_list4();
/*所用查询函数声明*/
int print(student shuchu[],int length); /*输出函数*/
void paixu(student t[],int n); /*排序函数*/
int record(student record[]); /*插入记录*/
int xrecord(student xjlu[],int length); /*插入新记录*/
int find(student czjl[],char crxh[],int length); /*查找某条记录函数*/
int del_record(student shanchu[],int length); /*删除某条记录函数*/
void save(student baocun[],int length); /*保存文件函数*/
int load(student jiazai[]);/*加载以前已有的记录函数*/
void copy(); /*复制文件函数*/
void search(student kscz[],int length);/*快速查找某条学生记录函数*/
void list(student shuchu[],int length); /*输出全部记录函数*/
/*主程序*/
void main()
{
    char mima1[6]={0},mima2[6]={0}; //密码字段
    int i;
    int xuanze;
    FILE *fp;
    if((fp=fopen("mima.txt","r"))==NULL) //判断文件是否正常打开,以读的方式若文件不存在,则返回为NULL
    {
        if((fp=fopen("mima.txt","wb"))==NULL)
        {
            printf("打开文件失败!");
            exit(0);
        }
        else
        {
            menu_list4();
            printf("                  初次进入系统,请设置口令");
            printf("\n");
            xinmima(fp);
            fclose(fp);
            while(1)
            {
                system("cls");
                xuanze=menu_list(); //菜选项单
                switch (xuanze)
                {
                case 1:menu_list1();break;
                case 2:menu_list2();break;
                case 3:menu_list3();break;
                case 4:printf("请确认是否退出!(Y/N)?\n");
                    if(getch()=='Y'||getch()=='y')exit(0);break;
                }
            }
        }
    }
    else
    {
p1:menu_list4();
        printf("\n");
        printf("          请输入进入口令:");
        mima(mima1);
        fread(mima2,6,1,fp);
        rewind(fp);
        i=0;
        while(i<6)
        {
            if(mima1[i]==mima2[i]) i++;
            else break;
        }
        if(i==6)
        {
            fclose(fp);
            while(1)
            {
                system("cls");
                xuanze=menu_list();
                switch (xuanze)
                {
                case 1:menu_list1();break;
                case 2:menu_list2();break;
                case 3:menu_list3();break;
                case 4: printf("请确认退出系统!(Y/N)?\n");
                    if(getch()=='Y'||getch()=='y') exit(0);break;
                }
            }
        }
        else
        {
            printf("\n");
            printf("          口令有误");
            system("pause");
            system("cls");
            goto p1;
        }
    }
    system("pause");
}
/*输入密码*/
void mima(char mima[6])
{
    int i=0;
    mima[i]=getch();
    printf("*");
    while(mima[i]!=13&&i<6) /*13是回车换行符号,密码最大为6位*/
    {
        i++;
        mima[i]=getch();
        printf("*");
    }
}
/*输入密码比较与记录*/
void xinmima(FILE *fp)
{
    int i;
    char mima1[6]={0},mima2[6]={0};
p1:printf("                  请输入新口令:");
    mima(mima1);
    printf("\n");
    printf("                  口 令  确 认:");
    mima(mima2);
    i=0;
    /*判断两次密码是否输入相同*/
    while(i<6)
    {
        if(mima1[i]==mima2[i])/*改为strcmp比较*/
            i++;
        else break;
    }
    if(i==6)
    {
        fwrite(mima1,6,1,fp); //存入文件
        rewind(fp); /*将文件操作位置指示器定位到文件开始处*/
    }
    else
    {
        system("cls");
        goto p1;
    }
}
int menu_list()
{
    int i;
    printf("\n");
    printf("                                    欢迎进入\n");
    printf("                  ***************************************\n");
    printf("\n");
    printf("                                班级总菜单管理系统             \n");
    printf("\n");
    printf("                  ***************************************\n");
    printf("\n");
    printf("       总菜单选项\n");
    putchar(10);
    printf("          1 .学生信息查询\n");
    printf("          2 .学生成绩查询\n");
    printf("          3 .登录信息修改\n");
    printf("          4 .退出管理系统\n");
    printf("\n");
    printf("      *******************************************\n");
    printf("      请选择你的操作:(1/2/3/4):");
    scanf("%d",&i);
    while(i<1||i>4)
    {
        printf("         选择有误请重新选择:");
        scanf("%d",&i);
    }
    printf("现在转入子菜单选项,");
    system("pause");
    system("cls");
    return(i);
}
void menu_list1()
{
    student xuesheng[M];
    int length;
    int g=0;
    for(;;)
    {
        int i;
        if(g)
        {
            char kongge;
            scanf("%c",&kongge); /*接受缓冲区的空格*/
        }
        g=1;
        printf("\n");
        printf("                                 欢迎进入\n");
        printf("                  ***************************************\n");
        printf("\n");
        printf("                                信息查询系统             \n");
        printf("\n");
        printf("                  ***************************************\n");
        printf("\n");
        printf("       菜单选项\n");
         putchar(10);
        printf("          1 .请输入学生记录(第一次使用)\n");
        printf("          2 .如果输入无序,请进行排序\n");
        printf("          3 .插入新记录\n");
        printf("          4 .删除某条记录\n");
        printf("          5 .保存文件\n");
        printf("          6 .加载文件\n");
        printf("          7 .复制文件\n");
        printf("          8 .快速查找某位学生信息\n");
        printf("          9 .输出全部学生信息\n");
        printf("          10.退出班级管理系统\n");
        printf("\n");
        printf("      *******************************************\n");
        printf("         请选择上面任意一项进行操作:");
         scanf("%d",&i);
        while(i<1||i>10)
        {
            printf("         选择有误请重新选择:");
            scanf("%d",&i);
        }
        system("cls"); /*清屏*/
        switch(i)
        {
        case 1:length=record(xuesheng);break;
        case 2:paixu(xuesheng,length);break;
        }
        system("cls");
        //free(&i);
    }

}
int menu_list2()
{
 

    return(0);
}
/*更改输入密码*/
void menu_list3()
{
    FILE *fp ;
    char mima1[6]={0},mima2[6]={0};
    int i=10;
    if((fp=fopen("mima.txt","r"))==NULL)
    {
        printf("不能代开文件!");
        exit(0);
    }
  p1:printf("请输入6位初始口令:");
    mima(mima1);
    fread(mima2,6,1,fp);
    i=0;
    while(i<6)
    {
        if(mima1[i]==mima2[i])
            i++;
        else break;
    }
    if(i==6)
    {
        if((fp=fopen("mima.txt","wb"))==NULL)
        {
            printf("打开文件失败!");
            exit(0);
        }
        else{
            system("cls");
            xinmima(fp);
            fclose(fp);
        }
    }
    else
        goto p1;
}
void menu_list4()
{
    printf("\n\n\n");
    printf("                                  欢迎进入\n");
    printf("                  ***************************************\n");
    printf("\n");
    printf("                                班级管理系统             \n");
    printf("\n");
    printf("                  ***************************************\n");
}
int record(student record[])
{
    int jlu,i; /*需要插入的记录数*/
printf("请输入需要记录好多位学生信息:");
    scanf("%d",&jlu);
    printf("\n");
    printf("  学号      姓名     性别\n");
    for(i=0;i<jlu;i++)
    {
        printf("********************************************\n");
        scanf("%s%s%c%c",record[i].xuehao,record[i].xingming,&record[i].xinbie,&record[i].kongge);
    }
    printf("*********************输入结束*******************\n");
/*    for(i=0;i<jlu;i++)
    {
        int k=i;
        for(int j=i+1;j<jlu-1;j++)
        if(record[k].xuehao==record[j].xuehao)
        {
            printf("出现相同学号,请从新录入!");
            system("cls");
            goto p1;
        }
    }判断学号相同*/
return(jlu);
}
/*排序函数*/
void paixu(student t[],int n)
{
   int i,j,flag;
   student temp; /*临时变量做交换数据用*/
   for(i=0;i<n;i++)
   {
      flag=0;  /*设标志判断是否发生过交换*/
      for(j=0;j<n-1;j++)
      if((strcmp(t[j].xuehao,t[j+1].xuehao))>0) /*比较大小*/
      {
          flag=1;
          temp=t[j];
          t[j]=t[j+1];
          t[j+1]=temp;
      }
      if(flag==0)break;  /*如果标志为0,说明没有发生过交换循环结束*/
   }
   printf("排序成功!!!\n"); /*显示排序成功*/
}
但我在调试的时候就是用record函数插入数据后,就要返回从新选择菜单项,可是那i值没有在叫输入,而是出现了无限循环的错误,请大家解决我的疑惑,谢谢,知道的在线告诉我,或加我QQ441091647指导我下,谢谢,头都给我搞大了
搜索更多相关主题的帖子: 函数 include 班级管理 yingyu 
2010-04-13 21:46
鬼鬼千年
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:39
专家分:140
注 册:2010-4-9
得分:20 
我调试通过了,也遇到了你说的那个问题,可是我的是要输入3个人,可输入2个人后就会跳出界面。我再调调啊
  

活了千年的鬼鬼,突然想当个人,看看人和鬼哪个好?
2010-04-13 23:20
鬼鬼千年
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:39
专家分:140
注 册:2010-4-9
得分:0 
好了,在编译时你要再从建个cpp文件,把以前都关了,我改的代码:
int record(student record[])
{
    int jlu=0,  i; /*需要插入的记录数*/
printf("请输入需要记录好多位学生信息:");
    scanf("%d",&jlu);
    printf("\n");
    printf("  学号      姓名     性别\n");
    printf("********************************************\n");
    for( i=0;i<jlu;i++)
    {
        scanf("%s%s%c%c",record[i].xuehao,record[i].xingming,&record[i].xinbie,&record[i].kongge);
    }
    printf("*********************输入结束*******************\n");

活了千年的鬼鬼,突然想当个人,看看人和鬼哪个好?
2010-04-13 23:28
鬼鬼千年
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:39
专家分:140
注 册:2010-4-9
得分:0 
我的QQ号:1015126672
交个朋友

活了千年的鬼鬼,突然想当个人,看看人和鬼哪个好?
2010-04-13 23:29
Dev1il
Rank: 2
等 级:论坛游民
帖 子:36
专家分:45
注 册:2010-3-15
得分:0 
你那好像什么都没该啊,就是给jlu赋值了
2010-04-17 19:37
Dev1il
Rank: 2
等 级:论坛游民
帖 子:36
专家分:45
注 册:2010-3-15
得分:0 
我说的是出现无限循环,不是你那输入两个就跳出,那我用了个空格接受,也许是缓冲区的空格在作怪
2010-04-17 19:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-302887-1-1.html




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

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