资源描述
XI`AN TECHNOLOGICAL UNIVERSITY
课程设计报告
课程名称: C语言程序设计
专 业:
班 级:
姓 名:
学 号:
指引教师:
成 绩:
年 1月5日
题目:学生成绩管理系统
思路:先建立一种链表然后以链表为基本进行各种操作,设计学生成绩管理系统,通过主页显示,依照自己需求按主页中所显示环节输入,删除,查找,插入,修改,记录学生信息。
算法:核心算法为链表生成,插入,查找,排序算法。
函数模块简介:
void xuanze();//选取功能
void shuchu(struct student*h);//输出
void tianjia(struct student*h);//添加
void shanchu(struct student*h);//删除
void chaxun(struct student*h);//查询
void genggai(struct student*h);//更改主
void gxuehao(struct student*p);//改学号
void gname(struct student*p);//改姓名
void ggaoshu(struct student*p);//改高数成绩
void gyingyu(struct student*p);//改英语成绩
void gc(struct student*p);//改c语言成绩
void tongji();//记录主
void max_average(struct student*h);//记录平均分最高
void max_gaoshu(struct student*h);//记录高数最高
void max_yingyu(struct student*h);//记录英语最高
void max_c(struct student*h);//记录c语言最高
void bujige_average(struct student*h);//记录平均分不及格学生信息
void bujige_gaoshu(struct student*h);//记录高数不及格学生信息
void bujige_yingyu(struct student*h);//记录英语不及格学生信息
void bujige_c(struct student*h);//批准c语言不及格学生信息
struct student*creat(int n);//创立链表
void order_two(struct student*p,struct student*q);//调换位置
void order(struct student*h);//排序
源程序
#include"stdio.h"
#include"string.h"
#include"conio.h"
#include <stdlib.h>
#define N 30
#define M 3
typedef struct student
{
char number[10];
char name[20];
float score[M];
float aver;
float total;
}STU;
STU stu[N];
int n;
void inputscore(void);
void savescore(void);
void avergescore(void);
void total(void);
void lookscore(void);
void searchscore(void);
void statistic(void);
void add(void);
void modify(void);
void delscore(void);
void savescore(void);
void menu(void);
int main()
{
short int flag=0;
menu();
do
{
flag=1;
switch(getch())
{
case'1':inputscore();break; /* 输入成绩*/
case'2':lookscore();break; /*查当作绩*/
case'3':searchscore();break; /*查找成绩*/
case'4':statistic();break; /*成绩记录*/
case'5':modify();break; /*修改成绩*/
case'6':add();break; /*添加成绩*/
case'7':delscore();break; /*删除成绩*/
case'8':savescore();break; /*保存成绩*/
case'9':exit(0); /*退出成绩*/
default:printf("输入有误\n");
}
printf("按任意键继续\n");
getch();
menu();
}while (flag==1);
}
void menu(void)
{
system("cls");
printf("\t\t \n");
printf("\t\t 学生信息管理系统 \n");
printf("\t\t \n");
printf("\t\t \n");
printf("\t\t 1. 输入成绩 2. 查当作绩并排序 \n");
printf("\t\t \n");
printf("\t\t 3. 查询学生成绩 4. 成绩记录 \n");
printf("\t\t \n");
printf("\t\t 5. 修改成绩 6. 添加成绩 \n");
printf("\t\t \n");
printf("\t\t 7. 删除成绩 8. 保存成绩 \n");
printf("\t\t \n");
printf("\t\t 9. 退出系统 \n");
printf("\t\t \n");
printf("\t\t请您选取(0-9)\n");
}
/************输入各个同窗学生信息***********/
void inputscore(void)
{
int i,j ;
system("cls");
printf("请输入学生总数:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入第%d个学生学号 姓名:\n",i+1);
scanf("%s",stu[i].number);
scanf("%s",stu[i].name);
printf("请输入学生成绩:\n");
printf("高数\tC语言\t大英\n");
for(j=0;j<M;j++)
scanf("%f",&stu[i].score[j]);
}
printf("成功输入\n");
}
/***************计算各个同窗总分************/
void total(void)
{
int i,j;
for(i=0;i<n;i++)
{
stu[i].total=0;
for(j=0;j<M;j++)
{
stu[i].total+=stu[i].score[j];
}
}
}
/********************计算各个同窗平均分*************/
void avergescore(void)
{
int i,j;
for(i=0;i<n;i++)
{
stu[i].aver=0;
for(j=0;j<M;j++)
{
stu[i].aver+=stu[i].score[j];
}
stu[i].aver=stu[i].aver/M;
}
}
/************查看学生成绩及依照平均分对学生排序************/
void lookscore(void)
{
int i,j,k;
STU t;
total();
avergescore();
system("cls");
for(i=0;i<n-1;i++)
{
for(k=i,j=i+1;j<n;j++)
if(stu[j].aver>stu[k].aver)
k=j;
if(k!=j)
{
t=stu[k];
stu[k]=stu[i];
stu[i]=t;
}
}
printf("名次\t学号\t\t姓名\t高数\tC语言\t大英\t总分\t平均分\n");
for(i=0;i<n;i++)
{
printf("%d\t%s\t\t%s\t",i+1,stu[i].number,stu[i].name);
for(j=0;j<M;j++)
printf("%4.2f\t",stu[i].score[j]); //输出成绩
printf("%4.2f\t",stu[i].total);
printf("%4.2f\t",stu[i].aver);
printf("\n");
}
}
/**********************通过输入学号查找学生成绩**********************/
void searchscore(void)
{
char a[10];
int i,j;
system("cls");
printf("请输入需查询学生学号\n");
scanf("%s",a);
for(i=0;i<n;i++)
{ if(strcmp(a,stu[i].number)==0) //比较两个字符串
{printf("名次\t学号\t\t姓名\t高数\tC语言\t大英\t总分\t平均分\n");
printf("%d\t%s\t\t%s\t",i+1,stu[i].number,stu[i].name);
for(j=0;j<M;j++)
printf("%4.2f\t",stu[i].score[j]);
printf("%4.2f\t",stu[i].total);
printf("%4.2f\t",stu[i].aver);
printf("\n");
break; /*找到该学生成绩信息后跳出for循环*/
}
else
printf("未找到该学生信息\n");
}
}
/************记录学生成绩信息,平均分及格率,先进率*************/
void statistic(void)
{
STU*p=stu;
int i,j;
float count=0.0,sum=0.0;
system("cls");
for(i=0;i<n;i++)
{sum+=(p+i)->aver ;}
printf("该班级平均分为%4.2f\n",sum/n); /*平均分计算*/
for(i=0;i<n;i++)
{ if((p+i)->aver>=60)
count++;
}
printf("该班级及格率为%4.2f%%\n",count/n*100);/*及格率计算*/
count=0.0;
for(i=0;i<n;i++)
{ if((p+i)->aver>=90)
count++;
}
printf("该班级先进率为%4.2f%%\n",count/n*100);/*先进率计算*/
printf("平均分低于60学生名单\n");
for(i=0;i<n;i++)
{
if(stu[i].aver<60)
printf("%s\n",stu[i].name);
} /*记录不及格学生名单*/
}
/****************修改学生成绩*************/
void modify(void)
{ char a[10];
int i,j;
system("cls");
printf("请输入需要修改成绩学生学号\n");
scanf("%s",a);
for(i=0;i<n;i++)
{ if(strcmp(a,stu[i].number)==0)
{ printf("名次\t学号\t\t姓名\t高数\tC语言\t大英\t总分\t平均分\n");
printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);
for(j=0;j<M;j++)
printf("%4.2f\t",stu[i].score[j]);
printf("%4.2f\t",stu[i].total);
printf("%4.2f\t",stu[i].aver);
printf("\n");
printf("请重新输入该学生学号 姓名:\n");
scanf("%s",stu[i].number);
scanf("%s",stu[i].name);
printf("请重新输入学生成绩:\n");
printf("高数\tC语言\t大英\n");
for(j=0;j<M;j++)
scanf("%f",&stu[i].score[j]);/*找到该学生成绩后进行后进行修改,跳出for循环*/
printf("修改成功\n");
break;
}
else
printf("请确认该学生与否为本班学生!\n");
}
}
/**********************添加学生成绩*************************/
void add(void)
{
int a,i,j;
system("cls");
printf("请输入新增长学生人数:\n");
scanf("%d",&a);
n=n+a;
for(i=n-a;i<n;i++)
{ printf("请输入学生%d学号 姓名:\n",i+1);
scanf("%s",stu[i].number);
scanf("%s",stu[i].name);
printf("请输入学生成绩:\n");
printf("高数\tC语言\t大英\n");
for(j=0;j<M;j++)
scanf("%f",&stu[i].score[j]);
printf("添加成功\n");
}
}
/*******************删除学生成绩********************/
void delscore(void)
{ int i,j,c;
char m,a[10];
system("cls");
printf("请输入学生学号\n");
scanf("%s",a);
for(i=0;i<n;i++)
{ if(strcmp(a,stu[i].number)==0)
{ printf("名次\t学号\t\t姓名\t高数\tC语言\t大英\t总分\t平均分\n");
printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);
for(j=0;j<M;j++)
printf("%4.2f\t",stu[i].score[j]);
printf("%4.2f\t",stu[i].total);
printf("%4.2f",stu[i].aver);
printf("\n");
c=i;
break;
}
else
printf("未找到该学生信息\n");
}
printf("与否删除该学生成绩(y/n)\n");
scanf("%s",&m);
if(m=='y')
{
for(i=c;i<n-1;i++)
stu[i]=stu[i+1]; /*构造体整体赋值将最后一位学生成绩信息拷贝进入前一位学生信息存储位置*/
n=n-1; /*删除该学生信息后学生总数减一*/
printf("删除成绩成功\n");
}
else
printf("删除成绩失败\n");
}
/***********************保存学生成绩*************************/
void savescore(void)
{
FILE*fp;
int i,flag=1;
char m;
system("cls");
puts("与否保存学生成绩(y/n)");
scanf("%s",&m);
if(m=='y')
{ if((fp=fopen("score.dat","wb"))==NULL)
{ printf("文献打开失败\n");
return;
}
for(i=0;i<n;i++)
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
{
printf("保存失败\n");
flag=0;
}
if(flag==1)
printf("保存成功!\n");
fclose(fp);
}
else
return;
展开阅读全文