#include <conio.h>
#include <stdio.h>
int main()
{
printf("请输入:")
char ch
ch = getch()
if(ch == -32)
while(1)
{
ch = getch()
switch(ch)
{
case 27:
{printf("Esc")return 0} //按esc退出
case 72:
{printf("A")break}
case 80:
{printf("B")break}
default:
break
}
}
}
#include <stdio.h>#include <stdlib.h>
#include <string.h>
#define MAX 1000
typedef struct Lesson //定义课程结构体
{
int Lesson_Num
char Lesson_Name[50]
int Lesson_Mark
int Lesson_Credit
}Lesson
typedef struct Student //定义学生的结构体
{
char Name[50]
int Num
int Lesson_Count
Lesson L[20]
}Student
Student S[MAX]
static int Student_Count = 0 //记录学生数的变量
void PrintInterface() //打印界面
int AddStudent() //添加,带返回值,提示 *** 作成功
int DelStudent() //删除,带返回值,提示 *** 作成功
void CheckStudent() //查学生成绩
void CheckClass() //查班成绩表
void WriteFile() //写入文本文件
void ReadFile() //读取文本文件
void main()
{
int Choice
while (1)
{
PrintInterface()
scanf("%d%*c", &Choice) //"%*c"是吸收回车的,因为后面会输入字母类型
if (Choice >= 0 && Choice <= 6) //选择 *** 作合法
{
switch (Choice)
{
case 0: exit(1)
case 1:
{
system("cls")
if (AddStudent()) printf("\n添加成功...回车继续\n")
else printf("\n添加失败...回车继续\n")
getchar()
getchar()
system("cls")
break
}
case 2:
{
system("cls")
if (DelStudent()) printf("\n删除成功...回车继续\n")
else printf("\n删除失败...回车继续\n")
getchar()
getchar()
system("cls")
break
}
case 3:
{
system("cls")
CheckStudent()
system("cls")
break
}
case 4:
{
system("cls")
CheckClass()
system("cls")
break
}
case 5: WriteFile()system("cls")break
case 6: ReadFile()system("cls")break
default:
}
}
else
{
printf("无此功能..重新选择..回车确定\n") //选择 *** 作非法
getchar()
system("cls") //清屏函数
}
}
}
void PrintInterface()
{
printf("\t -------------------------- \n")
printf("\t| 1、添加 |\n")
printf("\t| |\n")
printf("\t| 2、删除 |\n")
printf("\t| |\n")
printf("\t| 3、查学生成绩 |\n")
printf("\t| |\n")
printf("\t| 4、查班成绩表 |\n")
printf("\t| |\n")
printf("\t| 5、写入文本文件 |\n")
printf("\t| |\n")
printf("\t| 6、读取文本文件 |\n")
printf("\t| |\n")
printf("\t| 0、退出 |\n")
printf("\t -------------------------- \n")
printf("\t选择 *** 作:")
}
int AddStudent()
{
int S_count, i, j
printf("\n添加中......\n")
printf("\n添加学生人数(如1、2 ……999):")
scanf("%d", &S_count)
if (Student_Count + S_count >= MAX) return 0 //超过了数组上限
for (i = Student_Count i < Student_Count + S_count i++)
{
printf("\n\t第%d个学生:\n", i - Student_Count + 1)
printf("\n\t学生学号:") scanf("%d%*c", &S[i].Num)
printf("\n\t学生姓名:") gets(S[i].Name)
printf("\n\t该学生所修课程数:") scanf("%d", &S[i].Lesson_Count)
for (j = 0 j < S[i].Lesson_Count j++)
{
printf("\n\t第%d门课:\n", j + 1)
printf("\n\t\t课程编号:") scanf("%d%*c", &S[i].L[j].Lesson_Num)
printf("\n\t\t课程名称:") gets(S[i].L[j].Lesson_Name)
printf("\n\t\t课程成绩:") scanf("%d", &S[i].L[j].Lesson_Mark)
printf("\n\t\t课程学分:") scanf("%d", &S[i].L[j].Lesson_Credit)
if (S[i].L[j].Lesson_Mark < 60) S[i].L[j].Lesson_Credit = 0 //不及格的课程学分为0
}
}
Student_Count += S_count
return 1
}
int DelStudent()
{
char *D_Name
int D_Num
int i, j
printf("\n填写待删除学生的信息:\n")
printf("\n学生姓名:") gets(D_Name)
printf("\n学生学号:") scanf("%d", &D_Num)
for (i = 0 i < Student_Count i++)
{
if (!strcmp(S[i].Name, D_Name) && S[i].Num == D_Num)
{
printf("\n找到该学生,删除中......\n")
for (j = i + 1 j < Student_Count j++)
{
S[j - 1] = S[j]
}
break
}
}
if (i == Student_Count)
{
printf("\n未找到该学生...请核对所填信息\n\n")
return 0
}
else
{
Student_Count--
return 1
}
}
void CheckStudent()
{
int C_Choice
char C_Name[50]
int C_Num
int i, j
printf("\n输入所查学生信息(1.姓名 \\ 2.学号)选择:")
scanf("%d%*c", &C_Choice)
printf("\n查找中......\n")
if (C_Choice == 1 || C_Choice == 2) //选择合法
{
if (C_Choice == 1)
{
printf("\n姓名:") gets(C_Name)
for (i = 0 i < Student_Count i++) //全部穷举,防止同名同姓
{
if (!strcmp(S[i].Name, C_Name))
{
printf("\n学号:%d\t姓名:%s\n", S[i].Num, S[i].Name)
printf("\n课程编号\t课程名称\t课程成绩\t课程学分\n")
printf("-----------------------------------------------------\n")
for (j = 0 j < S[i].Lesson_Count j++)
{
printf("%d\t\t%s\t\t%d\t\t%d\n", S[i].L[j].Lesson_Num,
S[i].L[j].Lesson_Name, S[i].L[j].Lesson_Mark,
S[i].L[j].Lesson_Credit)
printf("-----------------------------------------------------\n")
}
printf("\n\n")
}
}
}
else
{
printf("\n学号:") scanf("%d%*c", &C_Num)
for (i = 0 i < Student_Count i++) //不用全部穷举,学号唯一
{
if (S[i].Num == C_Num)
{
printf("\n学号:%d\t姓名:%s\n", S[i].Num, S[i].Name)
printf("\n课程编号\t课程名称\t课程成绩\t课程学分\n")
printf("-----------------------------------------------------\n")
for (j = 0 j < S[i].Lesson_Count j++)
{
printf("%d\t\t%s\t\t%d\t\t%d\n", S[i].L[j].Lesson_Num,
S[i].L[j].Lesson_Name, S[i].L[j].Lesson_Mark,
S[i].L[j].Lesson_Credit)
printf("-----------------------------------------------------\n")
}
printf("\n\n")
break
}
}
}
printf("查找完毕...回车继续\n")
getchar()
}
else //选择不合法
{
printf("选择错误...回车继续\n")
getchar()
return
}
}
void CheckClass()
{
int C_LNum
double SSNum = 0, PassSNum = 0, SMark = 0
int i, j
printf("\n请输入课程编号:")
scanf("%d%*c", &C_LNum)
printf("\n查找中......\n\n")
printf("学号\t姓名\t课程名称\t课程成绩\t课程学分\n")
printf("----------------------------------------------------\n")
for (i = 0 i < Student_Count i++)
{
for (j = 0 j < S[i].Lesson_Count j++)
{
if (S[i].L[j].Lesson_Num == C_LNum)
{
printf("%d\t%s\t%s\t\t%d\t\t%d\n", S[i].Num, S[i].Name, S[i].L[j].Lesson_Name,
S[i].L[j].Lesson_Mark, S[i].L[j].Lesson_Credit)
printf("----------------------------------------------------\n")
SMark += S[i].L[j].Lesson_Mark
SSNum ++
if (S[i].L[j].Lesson_Mark >= 60) PassSNum++
break
}
}
}
printf("\n平均分:%.2lf\t及格率:%.2lf%%\n\n", SMark / SSNum, PassSNum / SSNum * 100)
printf("\n查找完毕...回车继续\n")
getchar()
}
void WriteFile()
{
FILE *fp
int i, j
char Adr[100]
printf("\n请输入写入的文件地址:\n\n地址输入格式:例如d:\\\\Student.txt(\\\\为转义字符):")
scanf("%s%*c", Adr)
printf("\n写入中......\n")
if (fp = fopen(Adr,"w")) //写入文件
{
fprintf(fp,"%d\n",Student_Count)
for (i = 0 i < Student_Count i++)
{
fprintf(fp,"%d\t%s\t%d\n",S[i].Num, S[i].Name,S[i].Lesson_Count)
for (j = 0 j < S[i].Lesson_Count j++)
{
fprintf(fp,"%d\t%s\t%d\t%d\n", S[i].L[j].Lesson_Num,
S[i].L[j].Lesson_Name,S[i].L[j].Lesson_Mark,
S[i].L[j].Lesson_Credit)
}
}
printf("\n写入完成...回车继续\n")
fclose(fp)
}
else
{
printf("\n写入失败...回车继续\n")
}
getchar()
}
void ReadFile()
{
FILE *fp
int i, j
char Adr[100]
printf("\n请输入读取(为防止读入错误,希望与写入文件内容格式一致)的文件地址:\n\n地址输入格式:例如d:\\\\Student.txt(\\\\为转义字符):")
scanf("%s%*c", Adr)
printf("\n读取中......\n")
if (fp = fopen(Adr,"r"))
{
fscanf(fp,"%d",&Student_Count)
for (i = 0 i < Student_Count i++)
{
fscanf(fp,"%d%s%d",&S[i].Num, &S[i].Name,&S[i].Lesson_Count)
for (j = 0 j < S[i].Lesson_Count j++)
{
fscanf(fp,"%d%s%d%d",&S[i].L[j].Lesson_Num,
&S[i].L[j].Lesson_Name,&S[i].L[j].Lesson_Mark,
&S[i].L[j].Lesson_Credit)
}
}
printf("\n读取成功...回车继续\n")
fclose(fp)
}
else
{
printf("\n读取失败...回车继续\n")
}
getchar()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)