C语言程序设计上机 带注解,用C语言实现 学生管理系统(要带注解)?解决方法

C/C++ code#include

#include

#include

#define STUDENT struct student

#define LEN sizeof(STUDENT)

#include

#include

#include

STUDENT

{

long num;

char name[5];

int math;

int english;

int chengxu;

int average;

STUDENT *next;

};

int n=0;

void menu()

{

printf(" **************成绩管理系统**************\n");

printf(" *\t1--成绩输入\t2--显示成绩 *\n");

printf(" *\t3--成绩查询\t4--删除成绩 *\n");

printf(" *\t5--排列成绩\t6--插入成绩 *\n");

printf(" *\t0--退出 \t7--保存于文件中 *\n");

printf(" ****************************************\n");

printf("请选择(0--7):");

}

char choice()

{

char select=getche();

return (select);

}

STUDENT *create()

{

STUDENT *head,*p1,*p2;

p1=p2=(STUDENT *)malloc(LEN);

scanf("%ld %s %d %d %d",&p1->num,p1->name,&p1->math,&p1->english,&p1->chengxu);

p1->average=(p1->math+p1->english+p1->chengxu)/3;

head=NULL;

while (p1->num!=0)

{

n++;

if(n==1)

head=p1;

else

p2->next=p1;

p2=p1;

p1=(STUDENT *) malloc(LEN);

scanf("%ld %s %d %d %d",&p1->num,p1->name,&p1->math,&p1->english,&p1->chengxu);

p1->average=(p1->math+p1->english+p1->chengxu)/3;

}

p2->next=NULL;

free(p1);

printf("\n");

return(head);

}

void print(STUDENT *head)//打印成绩信息

{

STUDENT *p;

p=head;

if(head!=NULL)

{

printf("\n全部成绩为:\n\n");

printf("学号\t姓名\t数学\t英语\t程序\t平均分\n\n");

do

{

printf("%ld\t%s\t%d\t%d\t%d\t%d\n", p->num, p->name,p->math,p->english,p->chengxu,p->average);

p=p->next;

}while(p!=NULL);

printf("\n");

}

else

printf("\n目前数据为空,还没有任何信息,请先创建成绩信息!\n\n");

}

void search(STUDENT *head,char nam[]) //根据姓名查找成绩信息

{

STUDENT *p5;

if(head==NULL)

{

printf("\n目前数据为空,还没有任何信息,请先创建成绩信息!\n\n");

return;

}

p5=head;

while(strcmp(p5->name,nam)&&p5->next!=NULL)

p5=p5->next;

if(strcmp(p5->name,nam)==0)

{

printf("\n该同学成绩信息为:\n\n");

printf("学号\t姓名\t数学\t英语\t程序\t平均分\n");

printf("%ld\t%s\t%d\t%d\t%d\t%d\n\n",p5->num, p5->name,p5->math,p5->english,p5->chengxu,p5->average);

}

else

printf("\n没有找到该同学的成绩信息!\n\n");

}

STUDENT *del(STUDENT *head,long num)//根据学号删除学生信息

{

STUDENT *p6,*p7;

if(head==NULL)

{

printf("\n删除失败!目前数据为空,还没有任何信息,请先创建成绩信息!\n");

return (head);

}

p6=head;

while(num!=p6->num &&p6->next!=NULL)

{

p7=p6;

p6=p6->next;

}

if(num==p6->num)

{

if(p6==head)

head=p6->next;

else

p7->next=p6->next;

printf ("\n已删除该名学生的成绩信息!\n");

n--;

}

else

printf ("\n没有找到该名学生的成绩信息!\n");

return(head);

}

STUDENT *sort(STUDENT *head) //根据平均分排序

{

STUDENT *temp,*t,*p3,*p4;

temp=head;

head=NULL;

while(temp!=NULL)

{

t=temp;

temp=temp->next;

if(head!=NULL&&head->averageaverage)

{

p3=head;

while(p3!=NULL&&p3->averageaverage)

{

p4=p3;

p3=p3->next;

}

t->next=p3;

p4->next=t;

}

else

{

t->next=head;

head=t;

}

}

return(head);

}

STUDENT *insert( STUDENT *head, STUDENT *stud) //根据平均分插入成绩信息

{

STUDENT *p3,*p4;

if(head!=NULL&&head->averageaverage)

{

p3=head;

while(p3!=NULL&&p3->averageaverage)

{

p4=p3;

p3=p3->next;

}

stud->next=p3;

p4->next=stud;

}

else

{

stud->next=head;

head=stud;

}

n++;

return (head);

}

void save(STUDENT *head) //存入文件

{

FILE *fp;

STUDENT *p;

fp=fopen("d:\\student.txt","wb");

if(fp==NULL)

{

printf("无法打开!");

exit(0);

}

p=head;

while(p!=NULL)

{

fwrite(p,LEN,1,fp);

p=p->next;

}

fclose(fp);

}

STUDENT *load() //从文件中读取

{

FILE *fp;

STUDENT *q,*head=NULL;

fp=fopen("d:\\student.txt","rb");

if(fp==NULL)

{

return head;

}

while(!feof(fp))

{

q=(STUDENT *)malloc(LEN);

if(fread(q,LEN,1,fp)==1)

{

q->next=head;

head=q;

n++;

}

}

fclose(fp);

return head;

}

int main(int argc, char *argv[])

{

STUDENT *head,*stu;

long del_num;

char select,nam[5];

select=0;

head=load();

while(select!='0')

{

system("cls");

menu();

select=choice();

switch(select)

{

case '0':

printf("\n\n您选择的是退出,欢迎您今后再次使用,再见!\n\n\n");

continue;

case '1':

printf("\n\n您选择的是成绩输入!\n");

printf("\n请输入成绩!\n\n");

printf("学号\t姓名\t数学\t英语\t程序\n");

head=create();

break;

case '2':

printf("\n\n您选择的是显示成绩!\n");

print(head);

break;

case '3':

printf("\n\n您选择的是成绩查询!\n");

printf("\n请输入要查寻的姓名:");

scanf("%s",nam);

search(head,nam);

break;

case '4':

printf("\n\n您选择的是删除成绩!\n");

printf("\n请输入要删除同学的学号:");

scanf("%ld",&del_num);

head=del(head,del_num);

printf("\n");

break;

case '5':

printf("\n\n您选择的是排列成绩!\n");

head=sort(head);

printf("\n按平均分排列后的所有成绩为:\n");

print(head);

break;

case '6':

printf("\n\n您选择的是插入成绩!\n");

printf("\n请输入插入成绩的信息!\n");

printf("\n学号\t姓名\t数学\t英语\t程序\t平均分\n");

stu=(STUDENT *)malloc(LEN);

scanf("%ld %s %d %d %d",&stu->num,stu->name,&stu->math,&stu->english,&stu->chengxu);

stu->average=(stu->math+stu->english+stu->chengxu)/3;

head=insert(head,stu);

printf("\n");

break;

case '7':

printf("\n\n您选择的是在文件中保存成绩!\n");

save(head);

printf("\n保存成功!\n\n");

break;

default:

printf("\n\n您的选择是错误的!\n\n");

}

system("PAUSE");

}

return (0);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值