大家帮我看下这个程序,谢谢了
我写了一个班级管理软件,写了部分代码代码如下:
#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指导我下,谢谢,头都给我搞大了