#define NULL 0
#define LEN sizeof(struct student)
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
//定义结构体
struct student
{
char StuID[20];
char CourseCode[20];
char CourseName[20];
float Credit;
float UsualResult;
float ShiyanResult;
float JuanmianResult;
float ZongheResult;
float ShideCredit;
struct student *next;
};struct student *head;
void Menu();
struct student *Create();
void Save();
void Sort();
void Serch();
//void Delete();
struct student *Delete();
void Display();
/************主函数*******************/
int main()
{
system("color 0D");
int choice;
char yes_no;
do
{
//system("cls");
Menu();
printf ("请在0~6中输入你的选择:\n");
scanf("%d",&choice);
printf ("\n");
switch(choice)
{
case 1: Create(); break;
case 2: Sort(); break;
case 3: Serch(); break;
case 4: Delete(); break;
case 5: Save(); break;
case 6: Display(); break;
case 0: printf("谢谢你的使用!"); exit(0); break;
default: printf("输入错误!!请输入0~6之间的数字");
}
printf("\n继续输入?Y/N : ");
do
{
scanf("%c",&yes_no);
}while( (yes_no != 'Y') && (yes_no != 'y') && (yes_no != 'N') && (yes_no!='n'));}while((yes_no == 'Y')||(yes_no == 'y'));
return 0;
}
/************菜单函数*****************/
void Menu()
{
printf("\n\n ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf(" |"); printf("\t\t\t欢迎进入学生管理系统"); printf("\t\t\t|");
printf("\n ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf(" |"); printf("\t\t\t 1.录入学生信息"); printf("\t\t\t|\n");
printf(" |"); printf("\t\t\t 2.排序学生信息"); printf("\t\t\t|\n");
printf(" |"); printf("\t\t\t 3.查找学生信息"); printf("\t\t\t|\n");
printf(" |"); printf("\t\t\t 4.删除学生信息"); printf("\t\t\t|\n");
printf(" |"); printf("\t\t\t 5.保存学生信息"); printf("\t\t\t|\n");
printf(" |"); printf("\t\t\t 6.显示学生信息"); printf("\t\t\t|\n");
printf(" |"); printf("\t\t\t 0.退出管理系统"); printf("\t\t\t|\n");
printf(" ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
}
/************创建链表并录入数据 **************/
struct student *Create()
{
struct student *p,*q;
int i,m;
printf("请输入您要建立的结点个数:");
scanf("%d",&m);
for(i = 1 ; i <= m ; i ++)
{
p=(struct student *)malloc(LEN);
printf ("请输入第%d个学生的信息:\n",i);printf ("\n请输入学号:");
scanf("%s",p->StuID);printf ("\n请输入课程编号:");
scanf("%s",p->CourseCode);
printf ("\n请输入课程名称:");
scanf ("%s",p->CourseName);
printf ("\n请输入学分:");
scanf("%f",&p->Credit);
printf ("\n请输入平时成绩:");
scanf("%f",&p->UsualResult);
printf ("\n请输入实验成绩:");
scanf("%f",&p->ShiyanResult);
printf ("\n请输入卷面成绩:");
scanf("%f",&p->JuanmianResult);
if((p->ShiyanResult) == -1)
{
p->ZongheResult = p->UsualResult*30/100 + p->JuanmianResult*70/100;
printf("综合成绩 = %f\n",p->ZongheResult);
}
else
{
p->ZongheResult = p->UsualResult*15/100 + p->JuanmianResult*70/100 + p->ShiyanResult*0.15/100;
printf("综合成绩 = %f\n",p->ZongheResult );
}int ZHResult = (p->ZongheResult)/10;
switch(ZHResult)
{
case 10:
case 9: p->ShideCredit = p->Credit*100/100;
printf("实得学分 = %f\n",p->ShideCredit); break;
case 8: p->ShideCredit = p->Credit*80/100;
printf("实得学分 = %f\n",p->ShideCredit); break;
case 7: p->ShideCredit=p->Credit*75/100;
printf("实得学分 = %f\n",p->ShideCredit); break;
case 6: p->ShideCredit = p->Credit*60/100;
printf("实得学分 = %f\n",p->ShideCredit); break;
default: p->ShideCredit = 0; printf("实得学分 = %f\n",p->ShideCredit);
}p->next = NULL;
if(head == NULL)
{
head = p;
q = p;
}
q->next = p;
q = p;
}
return head;
}/***************排序函数*******************/
void Sort()
{
int choice;
struct student *p1,*p2;
char stuID[20];
char couCode[20];
char couName[20];
float credit;
float usualRes;
float syRes;
float jmRes;
float zhRes;
float sdCre;
printf("\n");
printf("1综合成绩降序排列:\n");
printf("2实得学分升序排列:\n");
printf("请输入的选择:");
scanf("%d",&choice);
printf("\n");
switch(choice)
{
case 1: for(p1 = head ; p1 != NULL ; p1 = p1->next)
{
for(p2 = p1->next ; p2 != NULL ; p2 = p2->next) //选择法排序,每次选出最小的排到表头
{
if(p1->ZongheResult<p2->ZongheResult)
{
zhRes = p2->ZongheResult;
p2->ZongheResult = p1->ZongheResult;
p1->ZongheResult = zhRes;credit = p2->Credit;
p2->Credit = p1->Credit;
p1->Credit = p2->Credit;usualRes = p2->UsualResult;
p2->UsualResult = p1->UsualResult;
p1->UsualResult = usualRes;syRes = p2->ShiyanResult;
p2->ShiyanResult = p1->ShiyanResult;
p1->ShiyanResult = syRes;jmRes = p2->JuanmianResult;
p2->JuanmianResult = p1->JuanmianResult;
p1->JuanmianResult = jmRes;sdCre = p2->ShideCredit;
p2->ShideCredit = p1->ShideCredit;
p1->ShideCredit = sdCre;strcpy(stuID,p2->StuID);
strcpy(p2->StuID,p1->StuID);
strcpy(p1->StuID,stuID);strcpy(couCode,p2->CourseCode);
strcpy(p2->CourseCode,p1->CourseCode);
strcpy(p1->CourseCode,couCode);strcpy(couName,p2->CourseName);
strcpy(p2->CourseName,p1->CourseName);
strcpy(p1->CourseName,couName);
}
}
}
Display();
break;
case 2:for(p1 = head ; p1 != NULL ; p1 = p1->next)
{
for(p2 = p1->next ; p2 != NULL ; p2 = p2->next) //选择法排序,每次选出最小的排到表头
{
if(p1->ShideCredit<p2->ShideCredit)
{
sdCre = p2->ShideCredit;
p2->ShideCredit = p1->ShideCredit;
p1->ShideCredit = sdCre;zhRes = p2->ZongheResult;
p2->ZongheResult = p1->ZongheResult;
p1->ZongheResult = zhRes;credit = p2->Credit;
p2->Credit = p1->Credit;
p1->Credit = p2->Credit;usualRes = p2->UsualResult;
p2->UsualResult = p1->UsualResult;
p1->UsualResult = usualRes;syRes= p2->ShiyanResult;
p2->ShiyanResult = p1->ShiyanResult;
p1->ShiyanResult = syRes;jmRes = p2->JuanmianResult;
p2->JuanmianResult = p1->JuanmianResult;
p1->JuanmianResult = jmRes;strcpy(stuID,p2->StuID);
strcpy(p2->StuID,p1->StuID);
strcpy(p1->StuID,stuID);strcpy(couCode,p2->CourseCode);
strcpy(p2->CourseCode,p1->CourseCode);
strcpy(p1->CourseCode,couCode);strcpy(couName,p2->CourseName);
strcpy(p2->CourseName,p1->CourseName);
strcpy(p1->CourseName,couName);
}
}
}
Display();
break;}
return;
}
/********成绩查询函数**************/
void Serch()
{
struct student *p;
char stuid[20];
if(head == NULL)
{
printf("\nlist null!\n");
return;
}
printf("请输入你要查询的学号:\n");
scanf("%s",&stuid);
for(p = head ; p != NULL ; p = p->next)
{
if (strcmp(p->StuID,stuid) == 0)
{
printf("学号: ");
printf("s%\n",p->StuID);
printf("课程编号\t课程名称\t综合成绩\t实得成绩\n");
printf("%4s\t\t%4s\t\t%4.1f\t\t%4.1f",p->CourseCode,p->CourseName,p->ZongheResult,p->ShideCredit);
}
else if(p->next == NULL)
printf("\n no found");
}
}
/*********删除函数***************/
struct student *Delete()
{
struct student *p1,*p2;
char stuid[20];
printf("请输入你要删除的学号:");
scanf("%s",stuid);
if(head == NULL)
printf("\n链表为空");
else
{
p1 = p2 = head;
while((strcmp(p1->StuID,stuid) !=0 ) && (p1->next) != NULL)
{
p2 = p1;
p1 = p1->next;
}
if((strcmp(p1->StuID,stuid) == 0))
{
if(p1 == head)
head = p1->next;
else
p2->next = p1->next;
printf("\n该信息已被删除");
free(p1);
}
else
printf("not been found!!\n");
}
return head;
}
/*************保存函数****************/
void Save()
{
FILE *fp;
struct student *p;
if ((fp = fopen("B.txt","w")) == NULL)
{
printf("can't open!\n");
exit(0);
}
for(p = head ; p != NULL ; p = p->next)
fprintf(fp,"%c %c %c %f %f %f %f %f\n",p->StuID,p->CourseCode,p->CourseName,
p->StuID,p->UsualResult,p->ShiyanResult,p->JuanmianResult,
p->ZongheResult,p->ShideCredit);
fclose(fp);
printf("信息已保存");
}/*********显示记录***********/
void Display()
{
struct student *p;
if(head == NULL)
{
printf("\n list null");
return;
}
printf("学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分\n");
for(p = head ; p != NULL ; p = p->next)
printf("%2s %4s %10s %8.1f %6.1f %6.1f %10.1f %10.1f %6.1f\n",p->StuID,p->CourseCode,p->CourseName,
p->Credit,p->UsualResult,p->ShiyanResult,p->JuanmianResult,p->ZongheResult,p->ShideCredit);
}
C语言学生成绩管理系统
最新推荐文章于 2023-04-15 09:47:56 发布