#include
#include
#include
#include
typedef struct date
{
int year;
int month;
int day;
}DATE;
typedef struct stu
{
long stuID; //学号
char stuname[10]; //名字
char stusex; //性别
int score; //分数
}STU;
typedef struct node
{
STU stu;
struct node* next; //指向下一个节点的指针
}NODE;
NODE* head = NULL; //定义头指针
void start();
void inputstudent(STU stu[]);
void savestudent();
void readstudent();
void printfstudent();
#define N 30
int main()
{
STU stu[N];
int m = 4;
while (1)
{
start();
char ch = _getch();
switch (ch)
{
case '1': //录入学生信息
inputstudent(stu);
break;
case '2': //保存学生信息
savestudent();
break;
case '3'://读取学生信息
readstudent();
break;
case '4': //打印学生成绩
printfstudent();
break;
case '5': //按总分由高到低排出名次
break;
case '6': //按总分由低到高排出名次
break;
case '7': //按学号由小到大排出成绩表
break;
case '8': //按姓名字典顺序排序排出成绩表
break;
}
}
return 0;
}
void start()
{
printf("*****************************************\n");
printf("欢迎使用学生成绩管理系统 *\n");
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("*0.根据姓名查询学生成绩及排名 *\n");
printf("*****************************************\n");
}
void inputstudent(STU stu[])
{
NODE* newnode = (NODE*)malloc(sizeof(node)); //创建一个新结点来作头结点,使newnode这个指针可以通过->来当作结构体变量来用
newnode->next = NULL;
if (head == NULL) //遍历
{
head = newnode;
}
else
{
newnode->next = head;
head = newnode; //newnode = head; 修改
}
printf("学号:");
scanf_s("%ld", &newnode->stu.stuID);
printf("姓名:");
scanf_s("%s", newnode->stu.stuname, 10); //修改
printf("性别:");
scanf_s(" %c", &newnode->stu.stusex, 1); //修改
printf("成绩:");
scanf_s(" %d", &newnode->stu.score);
}
void savestudent() //保存学生信息
{
FILE* pf = fopen("pph.txt", "w"); //创建并打开文件
if (pf == NULL) //判断打开文件是否失败
{
printf("打开文件失败\n");
return;
}
NODE* p = head;
while (p != NULL)
{
fwrite(&p->stu, 1, sizeof(STU), pf);
p = p->next;
}
fclose(pf);
printf("数据保存成功\n");
system("pluse"); //暂停
system("cls"); //清屏
}
void readstudent() //读取学生信息
{
FILE* pf = fopen("pph.txt", "r"); //打开文件
if (pf == NULL) //判断打开文件是否失败
{
printf("err!\n");
return;
}
while (!feof(pf))
{
NODE* newnode = (NODE*)malloc(sizeof(NODE));
fread(&newnode->stu, 1, sizeof(STU), pf);
newnode->next = NULL;
//头插法
if (head == NULL)
{
head = newnode;
}
else
{
newnode->next = head;
head = newnode;
}
}
printf("加载数据成功\n");
fclose(pf);
}
void printfstudent()
{
NODE* P = head;
while (P!=NULL)
{
printf("%ld %s %c %d", P->stu.stuID, P->stu.stuname, P->stu.stusex, P->stu.score);
P = P->next;
}
system("pluse");
system("cls");
}
读取完数据,打印的时候没反应,要么就是闪烁
该回答引用GPTᴼᴾᴱᴺᴬᴵ
如果读取数据后打印时没有反应或者闪烁,可能是由于以下原因之一:
数据打印速度过快:如果你的程序循环打印大量数据,可能会导致数据输出速度过快,导致终端屏幕上的数据快速闪烁。这时可以考虑使用延迟等方法来降低打印速度。
终端屏幕刷新问题:有些终端程序会在数据输出时刷新屏幕,而有些则会等到数据全部输出后再刷新。如果你的终端程序是前者,那么每次输出数据都会导致屏幕闪烁。你可以在程序开始时调整终端程序的设置,让它在数据全部输出后再刷新屏幕,从而减少闪烁。
数据输出格式问题:如果你的数据输出格式不正确,可能会导致数据无法正确显示。例如,如果你打印了一个对象而没有实现其__str__方法,那么打印的结果可能是对象的地址,而不是你期望的数据。