|
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define M 100
#define N 1000
//定义一个学生的信息
typedef struct _Student
{
char name[20]; //姓名
int studid;//学号
int math; //数学成绩
int english; //英语成绩
int c; //C语言成绩
int pe; //体育成绩
int total; //总成绩
}Student;
//定义一个节点
typedef struct _Node
{
Student stu;//学生
struct _Node* pNext;
}Node;
Node*g_pHead=NULL; //头结点
char password[20]="4396"; //管理员密码
void Menu();//声明菜单界面函数
void Input();//声明成绩录入函数
void Print();//声明成绩显示函数
void Save();//声明成绩保存函数
void Order();//声明成绩排序函数
void Modify();//声明成绩修改函数
void Sta();//声明成绩统计函数
int main(){
int a;
while(1){ //while循环使程序持续运行
Menu();
scanf("%d",&a);
switch(a)//**用户进行选择**//
{
case 1:
Input(); //成绩录入
break;
case 2:
Print();//成绩显示
break;
case 3:
Save();//成绩保存
break;
case 4:
Order();//成绩排序
break;
case 5:
Modify();//成绩修改
break;
case 6:
printf("成绩统计\n");
break;
case 7:
printf("您已成功退出系统,欢迎下次使用!\n");
return 0;
default:
printf("无效选择,请重新输入\n");
break;
}
}
return 0;
}
void Menu()//菜单界面函数
{
printf("\t\t\t欢迎使用学生班级成绩管理系统!\n");
printf("\t\t=============================================\n");
printf("\t\t==\t 主菜单 ==\n");
printf("\t\t=============================================\n");
printf("\t\t==\t\t1.成绩录入 ==\n");
printf("\t\t==\t\t2.成绩显示 ==\n");
printf("\t\t==\t\t3.成绩保存 ==\n");
printf("\t\t==\t\t4.成绩排序 ==\n");
printf("\t\t==\t\t5.成绩修改 ==\n");
printf("\t\t==\t\t6.成绩统计 ==\n");
printf("\t\t==\t\t7.系统退出 ==\n");
printf("\t\t=============================================\n");
printf("\t\t===========请选择相应的功能列表==============\n");
}
void Input()//成绩录入函数
{
Node* pNewNode =(Node*)malloc(sizeof(Node));//创建一个新节点
pNewNode->pNext=NULL;
if(g_pHead==NULL)
{
g_pHead=pNewNode;
}
else
{
pNewNode->pNext=g_pHead;
g_pHead=pNewNode;
}
printf("请输入学生的姓名:\n");
scanf("%s",pNewNode->stu.name);
printf("请输入学生的学号:\n");
scanf("%d",&pNewNode->stu.studid);
printf("请输入学生的数学成绩:\n");
scanf("%d",&pNewNode->stu.math);
printf("请输入学生的英语成绩:\n");
scanf("%d",&pNewNode->stu.english);
printf("请输入学生的C语言成绩:\n");
scanf("%d",&pNewNode->stu.c);
printf("请输入学生的体育成绩:\n");
scanf("%d",&pNewNode->stu.pe);
pNewNode->stu.total=pNewNode->stu.math+pNewNode->stu.english+pNewNode->stu.c+pNewNode->stu.pe; //总成绩
printf("学生成绩录入成功!\n");
system("pause"); //暂停执行
system("cls"); //清屏
}
void Print()//成绩显示函数
{
system("cls");
printf(" 学生成绩表 \n");
printf("========================================================\n");
printf("姓名\t学号\t数学\t英语\tC语言\t 体育\t 总成绩\n");
//遍历链表,一次打印出学生的成绩
Node* p=g_pHead;
while(p!=NULL)
{
printf("%s %d %d %d %d %d %d\n",
p->stu.name,p->stu.studid,p->stu.math,p->stu.english,p->stu.c,p->stu.pe,p->stu.total);
p=p->pNext;//指向下一个,少了这个会无限循环
}
system("pause");
}
void Save()//成绩保存函数
{ //打开文件
FILE* fp=fopen("StuInformation.data","w");
if(fp==NULL)
{
printf("文件打开失败.\n");
return;
}
//再次遍历链表,保存学生的成绩
Node* p=g_pHead;
while(p!=NULL)
{
fwrite(&p->stu,1,sizeof(Student),fp);
p=p->pNext;
}
//关闭文件
fclose(fp);
printf("\n学生成绩保存成功!");
system("cls");
system("fause");//'fause' 不是内部或外部命令,也不是可运行的程序或批处理文件??
}
void Order()//成绩排序函数
{
Node* p=g_pHead;
Node*i,*j;
i=p;
j=(Node *)malloc(sizeof(Node));
j->stu.total=p->stu.total;
while(i->pNext!=NULL)
{
if(i->pNext->stu.total<j->pNext->stu.total)
break;
i=i->pNext;
}
j->pNext=i->pNext;
i->pNext=j;
while(p!=NULL){
printf("%d\n",p->stu.total);
p=p->pNext;
}
}
void Modify()//成绩修改函数
{
int studid,c;
char d[20];
printf("请输入管理员密码:");
scanf("%s",d);
if(strcmp(password,d)==0)
{
printf("管理员登陆成功.\n");
printf("请输入学生的学号:\n");
scanf("%d",&studid);
Node* p=g_pHead;
while(p!=NULL)
{
if(p->stu.studid==studid)
{
printf("请输入要修改成绩的科目:1.数学 2.英语 3.C语言 4.体育\n");
scanf("%d",&c);
printf("请输入你要改的分数:\n");
switch(c)
{
case 1:
scanf("%d",&p->stu.math);
break;
case 2:
scanf("%d",&p->stu.english);
break;
case 3:
scanf("%d",&p->stu.c);
break;
case 4:
scanf("%d",&p->stu.math);
break;
}
system("cls");
printf("成绩修改成功\n");
system("pause");
break;
}
p=p->pNext;
}
if(p==NULL)
{
printf("没有找到该学生的信息.\n");
system("pause");
system("cls");
}
}
while(strcmp(password,d)!=0)
{
system("cls");
printf("密码错误,返回主菜单\n");
system("pause");
break;
}
}
这个成绩排序函数自己写出来排完序后再次查看学生信息会出现乱码,求大佬帮忙改一下可以按要求输出单科成绩排序(本人刚入门C语言,真的找不出原因了)。 |
-
上一篇: 请大神们看看这个WinMain无法重载是什么情况下一篇: c++的学习之路
|