|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
// 目前我还只作了第一个“日常考情”的部分 因为我是一个一个询问需不需要执行下一个操作 我“日常考情”的函数我用来一个for循环,我如果我第一次输入玩“日常考情”后,
//在选择“继续添加学生考情”输入的信息(也就是第二次输入)在“日常考情”的for循环中因为我给i赋值是为0 ,它会是替换掉第一个输入的信息
//各位大佬求解求解 我学了将近半个月左右的C语言 做的一个学生管理的项目 有很多地方都不是搞不太清楚
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 100
struct xueshengkaoqin
{
char kc[10][10]; /* 课程 */
char name[N]; /* 姓名 */
int id; /* 学号ID */
} xskq[N]; /* 学生考勤 */
void tou(); /* 头部 */
void kaoqin(); /* 日常考勤 */
void kqxh(); /* 考勤循环 */
void czlx(); /* 查找学生类型 单个或者全部 */
void kqcz(); /* 单个学生考勤查找 */
void qbkqcz(); /* 全部学生考勤查找 */
void ckkc(); /* 查看考情 */
void jiuqin(); /* 就寝记录 */
void weisheng(); /* 日常卫生 */
void daode(); /* 道德品质 */
void biaoxian(); /* 课堂表现 */
void zhiye(); /* 作业完成 */
void zhoukao(); /* 周考 */
void yuekao(); /* 月考 */
void xiangmu(); /* 课程项目 */
void zongchengji(); /*课程总成绩 */
void baogao(); /* 打印报告 */
void shezhi(); /* 系统设置 */
int main()
{
// while(1)
tou();
}
void tou()
{
int n;
printf("\n");
printf("\n");
printf("\n");
printf("****************************欢迎来到学生管理系统*************************** \n");
printf("\n");
printf("\t\t\t 请输入所需操作\n");
printf("\n");
printf("\t\t\t 1.日常考勤\n");
printf("\t\t\t 2.就寝记录\n");
printf("\t\t\t 3.日常卫生\n");
printf("\t\t\t 4.道德品质\n");
printf("\t\t\t 5.课堂表现\n");
printf("\t\t\t 6.作业完成\n");
printf("\t\t\t 7.周考\n");
printf("\t\t\t 8.月考\n");
printf("\t\t\t 9.课程项目\n");
printf("\t\t\t 10.课程总成绩\n");
printf("\t\t\t 11.打印报告\n");
printf("\t\t\t 12.系统设置\n");
printf("\n");
printf("*************************************************************************** \n");
printf("\n");
scanf("%d",&n);
printf("\n");
switch(n)
{
case 1 :
kaoqin();
break;
default:
printf("请重新输入选择(1-12)\n");
tou();
break;
}
}
void kaoqin() /* 日常考勤 */
{
int i;
for(i=0;i<N;i++)
{
printf("\n");
printf("************************** 请输入日常考勤 **************************\n");
printf("\n");
printf("\t 考勤违规情况(迟到、早退、旷课、请假缺课)\n");
printf("\n");
printf(" 请管理老师(学生科、班主任老师)在每天5:00下班前记载好当天情况\n");
printf("\n");
printf("请输入学生名字\n");
scanf("%s",xskq[i].name);
fflush(stdin);
printf("请输入学生四位数的学号\n");
scanf("%d",&xskq[i].id);
fflush(stdin);
printf("请输入第一节课\n");
scanf("%s",&xskq[i].kc[0]);
fflush(stdin);
printf("请输入第二节课\n");
scanf("%s",&xskq[i].kc[1]);
fflush(stdin);
printf("请输入第三节课\n");
scanf("%s",&xskq[i].kc[2]);
fflush(stdin);
printf("请输入第四节课\n");
scanf("%s",&xskq[i].kc[3]);
fflush(stdin);
printf("请输入第五节课\n");
scanf("%s",&xskq[i].kc[4]);
fflush(stdin);
printf("请输入第六节课\n");
scanf("%s",&xskq[i].kc[5]);
fflush(stdin);
printf("请输入第七节课\n");
scanf("%s",&xskq[i].kc[6]);
fflush(stdin);
printf("请输入第八节课\n");
scanf("%s",&xskq[i].kc[7]);
fflush(stdin);
printf("请输入第九节课\n");
scanf("%s",&xskq[i].kc[8]);
fflush(stdin);
printf("请输入第十节课\n");
scanf("%s",&xskq[i].kc[9]);
fflush(stdin);
kqxh();
break;
}
}
void kqxh() //考勤循环
{
char c;
int i;
for(i=0;i<N;i++)
{
printf("\n");
printf("是否继续添加学生考勤(y或n)\n");
fflush(stdin);
scanf("%c",&c);
if(c=='y')
{
kaoqin(); /* 再次跳转日常考勤 */
return kaoqin() ;
}
else if(c=='n')
{
ckkc(); /* 查看考情 */
}
else if(c!='y' || c!='n')
{
printf("\n");
printf("温馨提示输入错误 请重新输入\n");
printf("\n");
kqxh();
}
}
}
void ckkc() /* 查看考情 */
{
char z;
int j;
for(j=0;j<N;j++)
{
printf("\n");
printf("是否需要查看学生的考勤情况(y或n)\n");
fflush(stdin);
scanf("%c",&z);
if(z=='y')
{
czlx();/* 查找学生类型 单个或者全部 */
// break;
}
else if(z=='n')
{
tou(); /* 返回头部 */
}
else if(z!='y' || z!='n')
{
printf("\n");
printf("温馨提示输入错误 请重新输入\n");
printf("\n");
ckkc();
}
}
}
void czlx()/* 查找学生类型 单个或者全部 */
{
char z;
int j;
for(j=0;j<N;j++)
{
printf("\n查找单个学生请输入(y)查找所有学生请输入(s)\n");
fflush(stdin);
scanf("%c",&z);
if(z=='y')
{
kqcz(); /*单个学生考勤查找*/
}
else if(z=='s')
{
qbkqcz();/* 全部学生考勤查找 */
// return
}
else if(z!='y' || z!='s')
{
printf("\n");
printf("温馨提示输入错误 请重新输入\n");
printf("\n");
czlx();
}
}
}
void qbkqcz()/* 全部学生考勤查找 */
{
// char sname[N];
int i;
for(int i=0;i<N;i++)
{
printf("|| 名字 || 学号 || 第一节 || 第二节 || 第三节 || 第四节 || 第五节 || 第六节 || 第七节 || 第八节 || 第九节 || 第十节 ||\n");
printf("\n");
printf
(
" %-14s %-14d %-14s %-14s %-14s %-14s %-14s %-14s %-14s %-14s %-14s %-14s \n",
xskq[i].name,xskq[i].id,xskq[i].kc[0],xskq[i].kc[1],xskq[i].kc[2],xskq[i].kc[3],
xskq[i].kc[4],xskq[i].kc[5],xskq[i].kc[6],xskq[i].kc[7],xskq[i].kc[8],xskq[i].kc[9],
xskq[i].kc[10]
) ;
tou();
}
}
void kqcz()//单个学生考勤查找
{
// int z;
char sname[N];
int i;
printf("\n");
printf("请输入您要查找的学生\n");
fflush(stdin);
gets(sname);
printf("\n");
if(strcmp(sname,xskq[i].name)==0)
{
printf("|| 名字 || 学号 || 第一节 || 第二节 || 第三节 || 第四节 || 第五节 || 第六节 || 第七节 || 第八节 || 第九节 || 第十节 ||\n");
printf("\n");
printf
(
" %-14s %-14d %-14s %-14s %-14s %-14s %-14s %-14s %-14s %-14s %-14s %-14s \n",
xskq[i].name,xskq[i].id,xskq[i].kc[0],xskq[i].kc[1],xskq[i].kc[2],xskq[i].kc[3],
xskq[i].kc[4],xskq[i].kc[5],xskq[i].kc[6],xskq[i].kc[7],xskq[i].kc[8],xskq[i].kc[9],
xskq[i].kc[10]
);
tou();
}
else
{
printf("抱歉为查找学生信息 请重新查找\n");
printf("\n");
kqcz();
}
}
首先,我建议你把所有的 换成
刷新缓冲区最好不要用fflush(stdin)
这玩意行为其实是未定义的 而且 你程序里 缓冲区也就总是有'\n'一个字符
getchar够用了
其次,我建议你所有变量声明即初始化,不要咔咔咔 声明一堆变量,又不初始化
我看你的程序 甚至还有明明上面声明了一个 i 然后在循环里又声明一次
还有一件事,scanf 获取字符串是没有终止符的,我也不推荐用scanf获取用户输入的字符串
最好是自己用getchar写一个,也不是很难
再然后,你那个获取用户输入课程,简直辣眼睛,用个循环不就完事了 写那么长....
嘛,我也不知道你用的啥编译器,反正尽量注意变量的初始化吧...
-------------------------------------------------------------------------------------
void kqcz()//单个学生考勤查找 ----> 这个函数里的 i 没有初始化
void qbkqcz()/* 全部学生考勤查找 */ -----> 这个函数里的 i 重定义
|
|