课程设计之成绩管理系统

课程设计

#include<stdio.h>

#include <stdlib.h> //成绩数据处理系统
#include <string.h>
#include <malloc.h>
#define LEN sizeof(struct student)
struct student
{
long num;
char name[20];
float score[3];
float aver;
struct student *next;
};
void denglu(); //登陆系统函数 
void t_menu(struct student *head); //老师菜单 
void s_menu(struct student *head); //学生菜单 
void choose(struct student *head); //功能选择 
void input_head(int n,struct student *head); //添加信息 
struct student *create_head(struct student*head); //创建头结点 
void serch_message(struct student *head); //查找信息菜单 
void serch_num(struct student *head); //按照学号查找 
void serch_name(struct student *head); //按照姓名查找 
void serch_highest(struct student *head);  
void insert(struct student *head); //插入新结点 
void revise(struct student *head);  
void delete_head(struct student *head); //删除结点 
void conserve_file(struct student *head); //保存文件 
void nopass(struct student *head); //不及格学生信息 
struct student *read_file(); //读取文件 
void print(struct student *head); //打印函数 
void free1(struct student *head); //释放空间 
void serch_message1(struct student *head);  
int main()
{
system("color  3E");
denglu();
return 0;
}
void denglu()
{
int i;
printf("*********1:老师**********2:学生***********\n");
scanf("%d",&i);
while(1)
{
if(i==1)
{
struct student *head;
//head=(struct student *)malloc(LEN);
head=create_head(head);
t_menu(head);
break;
}
else if(i=2)
{
struct student *head;
head=create_head(head);
s_menu(head);
break;
}
else
printf("请正确输入!\n");
}
}
struct student *create_head(struct student *head) //创建头节点 
{
struct student *p;
p=(struct student *)malloc(LEN);
if(p==NULL)
{
printf("创建头节点失败!\n");
exit(-1);
}
p->next=NULL;
return(p); 
}
void t_menu(struct student *head)
{
while(1)
{
printf("\t老师您好!!\n");
printf("\n   **欢**********迎*************使************用****\n");
printf("    成绩数据处理系统 \n");
printf("   *************************************************\n\n");
printf("\tSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS\n");
printf("\t** 1,添加信息     **\n");
printf("\t** 2,查信息     **\n");
printf("\t** 3,插入找新信息     **\n");
printf("\t** 4,修改成绩     **\n");
printf("\t** 5,删除信息     **\n");
printf("\t** 6,不及格的信息    **\n");
printf("\t** 7,保存到文件test.txt **\n");
printf("\t** 8,读取test.txt的信息 **\n");
printf("\t** 9,输出链表     **\n");
printf("\t** 0,退出程序     **\n");
printf("\tSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS\n");
printf("\t请输入你的选择[   ]\b\b\b");
choose(head);
}


}
void s_menu(struct student *head) //学生菜单
{
int a;
printf("  同学你好!\n");
printf("\n   **欢**********迎*************使************用****\n");
printf("   \t   成绩数据处理系统 \n");
printf("   *************************************************\n\n");
while(1)
{
printf("\tSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS\n");
printf("\t** 1,显示所有信息      **\n");
printf("\t** 2,查找信息      **\n");
printf("\t** 3,不及格的信息      **\n");
printf("\t** 0,退出程序      **\n");
printf("\tSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS\n");
printf("\t请输入你的选择[   ]\b\b\b");
scanf("%d",&a);
switch(a)
{
case 1: 
head->next=read_file();
print(head);
//s_menu(head);
break;
case 2: 
serch_message1(head);
break;
case 3:
nopass(head);
           break;
   case 0: 
free1(head); //释放空间
printf("\t****已经退出程序****\t\n");
printf("\t欢迎下次使用!\t\n");
exit(-1);
 default:
  printf("警告!输入错误!\n\t请重新输入!\n");
break;
}
}
}
void choose(struct student *head)
{
int ch;
int i,n;
scanf("%d",&ch);
switch(ch)
{
case 1: 
printf("你想添加几组信息[   ]\b\b\b");
scanf("%d",&n);
input_head(n,head);
break;
case 2:
serch_message(head);
break;
case 3:
insert(head);
print(head);
break;
case 4:
revise(head);
       break;
case 5:
delete_head(head);
conserve_file(head);
print(head);
       break;
case 6:
nopass(head);
       break;
case 7:
       conserve_file(head);
       print(head);
            printf("\t\t保存信息成功!\t\n");
break;
case 8:
head->next=read_file();
print(head);
t_menu(head);
break;
case 9:
print(head);
break;
case 0:
free1(head); //释放空间
printf("\t****已经退出程序****\t\n");
printf("\t\t欢迎下次使用!\t\n");
exit(-1);
default:
printf("警告!输入错误!\n\t请重新输入!\n");
break;
}
}
void input_head(int n,struct student *head)
{

struct student *p,*p1,*q;
p=(struct student *)malloc(LEN);
q=p;
while(n)
{
printf("请输入你要添加的学生的信息!\n");
p1=p;
printf("学号:");
scanf("%ld",&p->num);
printf("姓名:");
scanf("%s",p->name );
printf("高数:");
scanf("%f",&p->score[0]);
printf("英语:");
scanf("%f",&p->score[1]);
printf("C语言成绩:");
scanf("%f",&p->score[2]);
//scanf("%ld%s%f%f%f",&p->num,p->name,&p->score[0],&p->score[1],&p->score[2]);
p->aver=(p->score[0]+p->score[1]+p->score[2])/3;
p=(struct student *)malloc(LEN);
p1->next=p;
n--;
}
p1->next=NULL;
while(head->next!=NULL)
{
head=head->next;
}
head->next=q;
}
void serch_message(struct student *head) //学生查询 
{
int a;
while(1)
{
printf("*** 1,按学号查询 ***\n");
printf("*** 2,按姓名查询 ***\n");
printf("*** 3,查询最高分 ***\n");
printf("*** 0,返回 ***\n");
printf("请输入你的选择[   ]\b\b\b");
scanf("%d",&a);
switch(a)
{
case 1:
serch_num(head); /*按学号查询*/
break;
case 2:
serch_name(head); /*按姓名查询*/
break;
case 3:
serch_highest(head); /*最高分查询*/
break;
case 0:
t_menu(head);/* 返回 */
break;
default:
printf("警告!输入错误!\n请重新输入!\n");
break;
}
}
}
void serch_message1(struct student *head)
{
int a;
while(1)
{
printf("*** 1,按学号查询 ***\n");
printf("*** 2,按姓名查询 ***\n");
printf("*** 3,查询最高分 ***\n");
printf("*** 0,返回 ***\n");
printf("请输入你的选择[   ]\b\b\b");
scanf("%d",&a);
switch(a)
{
case 1:
serch_num(head);/*按学号查询*/
break;
case 2:
serch_name(head);/*按姓名查询*/
break;
case 3:
serch_highest(head);/*最高分查询*/
break;
case 0:
s_menu(head);/* 返回 */
break;
default:
printf("警告!输入错误!\n请重新输入!\n");
break;
}
}
}
void serch_num(struct student *head)
{
long a;
int c=1;
printf("请输入你要查询的学生的学号!\n");
scanf("%ld",&a);
while(head->next!=NULL)
{
head=head->next;
if(head->num==a)
{
c=-1;
printf("你查询的学生的信息为:\n");
//printf("%ld %s %f %f %f %f\n",head->num,head->name,head->score[0],head->score[1],head->score[2],head->aver);
printf("学号:%ld  ",head->num );
printf("姓名:%s  ",head->name );
printf("高数:%f  ",head->score[0]);
printf("英语:%f  ",head->score[1]);
printf("C语言:%f  ",head->score[2]);
printf("平均分:%f\n",head->aver );
}
}
if(c>0)
{
printf("没有找到此学生!\n");
}
}
void serch_name(struct student *head)
{
int b=1;
char a[20];
scanf("%s",a);
while(head->next!=NULL)
{
head=head->next;
if(strcmp(head->name,a)==0)
{
b=-1;
printf("你查询的学生的信息为:\n");
//printf("%ld %s %f %f %f %f\n",head->num,head->name,head->score[0],head->score[1],head->score[2],head->aver);
printf("学号:%ld  ",head->num );
printf("姓名:%s  ",head->name );
printf("高数:%f  ",head->score[0]);
printf("英语:%f  ",head->score[1]);
printf("C语言:%f  ",head->score[2]);
printf("平均分:%f\n",head->aver );
}
}
if(b>0)
{
printf("没有找到此学生!\n");
}
}
void serch_highest(struct student *head)
{
struct student *p;
float b;
head=head->next;
p=head;
b=head->aver;
while(head->next!=NULL)
{
head=head->next;
if(b<head->aver)
{
b=head->aver;
}
}
while(p->next!=NULL)
{
p=p->next;
if(b==p->aver)
{

printf("平均分最高的学生信息为:\n");
printf("学号:%ld  ",p->num );
printf("姓名:%s  ",p->name );
printf("高数:%f  ",p->score[0]);
printf("英语:%f  ",p->score[1]);
printf("C语言:%f  ",p->score[2]);
printf("平均分:%f\n",p->aver );
//printf("%ld %s %f %f %f %f\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->aver);
}
}
}
void insert(struct student *head)
{
struct student *p;
p=(struct student *)malloc(LEN);
printf("请输入你要插入的学生信息:\n");
printf("学号:");
scanf("%ld",&p->num);
printf("姓名:");
scanf("%s",p->name);
printf("高数成绩:");
scanf("%f",&p->score[0]);
printf("英语成绩:");
scanf("%f",&p->score[1]);
printf("C语言成绩:");
scanf("%f",&p->score[2]);
p->aver =(p->score[0]+p->score[1]+p->score[2])/3;
p->next=NULL;
while(head->next!=NULL)
{
head=head->next;
}
head->next=p;
}
void print(struct student *head)
{
int n=0;
printf("学号:   \t姓名: \t高数成绩:\t英语成绩:\tC 语言成绩:\t平均分:\n");
while(head->next!=NULL)
{
n++;
head=head->next;
printf("%d   \t%s\t%3.2f\t\t%3.2f\t\t%3.2f\t\t%3.2f\t\n",head->num,head->name,head->score[0],head->score[1],head->score[2],head->aver);
}
printf("______________________链表的节数为 %d_____________________\n",n);
}
void revise(struct student *head)             /*------修改信息------*/
{
struct student *p;
p=head;
char a[20];
int m=-1;
printf("*************** 请输入要修改学生的姓名 *****************************\n");
scanf("%s",a);
while(p->next!=NULL)
{
   if(strcmp(p->name,a)==0)
   {
   m=1;
   printf("*************** 请输入新同学的成绩 *****************************\n");
printf("高数成绩:");
scanf("%f",&p->score[0]);
printf("英语成绩:");
scanf("%f",&p->score[1]);
printf("C语言成绩:");
scanf("%f",&p->score[2]);
head->aver =(p->score[0]+p->score[1]+p->score[2])/3;
break;
   }
   p=p->next;
}
if(m<0)
printf("没有此学生!!!\n");
}
void delete_head(struct student *head) /* 删除信息  */
{

   char name[20];
   int a,m=-1;
struct student *p,*q;
p=head;
   printf("请输入你要删除的学生的姓名:");
   scanf("%s",name);
   while(p->next!=NULL)
   {
      if(strcmp(name,p->next->name)==0)
      {    
printf("学号:   \t姓名: \t高数成绩:\t英语成绩:\tC 语言成绩:\t平均分:\n");
printf("%d   \t%s\t%3.2f\t\t%3.2f\t\t%3.2f\t\t%3.2f\t\n",p->next->num,p->next->name,p->next->score[0],p->next->score[1],p->next->score[2],p->next->aver);
printf("是否确定删除该组信息?\n 1:是,2:否[  ]\b\b\b");
scanf("%d",&a);
if(a==1)
{
m=1;
  q=p->next;
p->next=p->next->next;
free(q);
printf("********已删除********\n");
   break;
}
if(a==2)
{
continue;
}
}
p=p->next;
   }
   if(m<0)
printf("没有此学生!!!\n");
}
void conserve_file(struct student *head) /*保存文件*/
{
struct student *p;

FILE *fp;
p=head;
if((fp=fopen("test.txt","wb"))==NULL)
{
printf ("没有事先创建test.txt这个文件\n");
exit(-1);
}
while(p->next != NULL)
{
p=p->next; 
fwrite(p,LEN,1,fp);
                         
}
fclose(fp);
}
void nopass(struct student *head)
{
int a=1;
while(head->next!=NULL)
{
head=head->next;
if(head->aver<60.0)
{
a=-1;
//printf("%d   \t%s\t%3.2f\t\t%3.2f\t\t%3.2f\t\t%3.2f\t\n",head->num,head->name,head->score[0],head->score[1],head->score[2],head->aver);
printf("学号:%ld  ",head->num );
printf("姓名:%s  ",head->name );
printf("高数:%f  ",head->score[0]);
printf("英语:%f  ",head->score[1]);
printf("C语言:%f  ",head->score[2]);
printf("平均分:%f\n",head->aver );
}
}
if(a>0)
{
printf("没有学生不及格\n");
}
}
struct student *read_file()
{
struct student *p,*q,*head;
FILE *fp;
head=(struct student *)malloc(LEN);
p=(struct student *)malloc(LEN);
if((fp=fopen("test.txt","rb"))==NULL)
{
printf ("\n\tcannot open this file!\n\n");
exit(-1);
}
if(fread(head,LEN,1,fp))
{
q=head;
printf("__________________________________________\n");
while(fread(p,LEN,1,fp))
{printf("%d   \t%s\t%3.2f\t\t%3.2f\t\t%3.2f\t\t%3.2f\t\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->aver);
q->next=p;
q=p;
p=(struct student *)malloc(LEN);
}

}
q->next=NULL;
fclose(fp);
return (head);
}
void free1(struct student *head) //释放空间
{
struct student *q;
q=(struct student *)malloc(LEN);
q=head;
while(head->next!=NULL)
{
head=head->next;
free(q);
q=head;
}
free(q);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值