学生成绩管理系统设计
㈠ 学生成绩管理系统设计
我是赵文滔
#include<stdio.h>
#include<string.h>
#define SIZE 2
struct xs
{
int num;
char name[20];
float yingyu;
float shuxue;
float pingjun;
}xuesheng[SIZE+1],*p=xuesheng;
void main()
{
int a,i,j,k=0,m,n,t;
char b[20],c;
do{
printf("请输入选项:\n1输入学生成绩\n2按姓名查询学生成绩\n3按学号查找学生成绩\n4按姓名排序\n5按学号排序\n6按成绩排序\n7打印学生成绩\n");
scanf("%d",&a);
if(a==1)
{
printf("请输入学生姓名、学号、英语成绩、数学成绩\n");
for(i=1;i<=SIZE;i++)
{
scanf("%s %d %f %f",xuesheng[i].name ,&xuesheng[i].num ,&xuesheng[i].yingyu ,&xuesheng[i].shuxue );
xuesheng[i].pingjun =(xuesheng[i].yingyu+xuesheng[i].shuxue)/2;
}
m=0;
}
else {printf("请先输入数据\n");m=1;}
}while(m==1);
do
{printf("是否进行其他操作?1/0\n");
scanf("%d",&k);
if(k==1)
{
printf("请再次输入选择\n");
scanf("%d",&a);
if(a==2)
{
printf("请输入要查询的姓名\n");
scanf("%s",b);
for(i=1;i<=SIZE;i++)
{
if(strcmp(b,xuesheng[i].name)==0)printf("姓名:%s学号%d英语成绩%f数学成绩:%f平均成绩%f\n",xuesheng[i].name ,xuesheng[i].num ,xuesheng[i].yingyu ,xuesheng[i].shuxue,xuesheng[i].pingjun );
}
}
if(a==3)
{
printf("请输入要查询的学号\n");
scanf("%d",&m);
printf("姓名:%s学号%d英语成绩%f数学成绩:%f平均成绩%f",xuesheng[m-1000].name ,xuesheng[m-1000].num ,xuesheng[m-1000].yingyu ,xuesheng[m-1000].shuxue,xuesheng[m-1000].pingjun );
}
if(a==4)
{
printf("按姓名排序如下:\n");
for(i=1;i<=SIZE;i++)
{ for(j=i+1;j<=SIZE;j++)
if(strcmp(xuesheng[i].name,xuesheng[j].name)>0){*p=xuesheng[j];xuesheng[j]=xuesheng[i];xuesheng[i]=*p;}
}
for(i=1;i<=SIZE;i++)
printf("姓名:%s学号%d英语成绩%f数学成绩:%f平均成绩%f\n",xuesheng[i].name ,xuesheng[i].num ,xuesheng[i].yingyu ,xuesheng[i].shuxue,xuesheng[i].pingjun );
}
if(a==5)
{
printf("按学号排序如下:\n");
for(i=1;i<=SIZE;i++)
for(j=i+1;j<=SIZE;j++)
if(xuesheng[i].num>xuesheng[j].num){*p=xuesheng[j];xuesheng[j]=xuesheng[i];xuesheng[i]=*p;}
for(i=1;i<=SIZE;i++)
printf("姓名:%s学号%d英语成绩%f数学成绩:%f平均成绩%f\n",xuesheng[i].name ,xuesheng[i].num ,xuesheng[i].yingyu ,xuesheng[i].shuxue,xuesheng[i].pingjun );
}
if(a==6)
{
printf("按平均成绩排序如下:\n");
for(i=1;i<=SIZE;i++)
for(j=i+1;j<=SIZE;j++)
if(xuesheng[i].pingjun>xuesheng[j].pingjun){*p=xuesheng[j];xuesheng[j]=xuesheng[i];xuesheng[i]=*p;}
for(i=1;i<=SIZE;i++)
printf("姓名:%s学号%d英语成绩%f数学成绩:%f平均成绩%f\n",xuesheng[i].name ,xuesheng[i].num ,xuesheng[i].yingyu ,xuesheng[i].shuxue,xuesheng[i].pingjun );
}
if(a==7)
{
printf("按学号输出如下:\n");
for(i=1;i<=SIZE;i++)
for(j=i+1;j<=SIZE;j++)
if(xuesheng[i].num>xuesheng[j].num){*p=xuesheng[j];xuesheng[j]=xuesheng[i];xuesheng[i]=*p;}
for(i=1;i<=SIZE;i++)
printf("姓名:%s学号%d英语成绩%f数学成绩:%f平均成绩%f\n",xuesheng[i].name ,xuesheng[i].num ,xuesheng[i].yingyu ,xuesheng[i].shuxue,xuesheng[i].pingjun );
}
if(a==0)printf("谢谢使用\n");
if(a==8||a==9)printf("请重新输入\n");
}
}while(a!=0);
}
㈡ 学生成绩管理系统课程设计
功能 能够实现输入记录、查询记录、更新记录、统计记录、输出记录等功能。
1. 输入记录。对每个学生的学号、姓名、班级、数学、英语、计算机成绩进行输入并存储,在程序的运行过程中,数据的存储可以采用结构体数组或者链表,但是最终应该存储在文件中。
2. 维护记录。能够实现添加、删除、修改学生记录,但是一定要将最终数据存储到文件中。
3. 查询记录。根据班级、学号、科目等查询学生的成绩。如果查询时学生数据并没有读入到结构体数组或者链表中,则应该先从文件中读出数据并存储在结构体数组或者链表中,然后在结构体数组或者链表中查询满足条件的数据。
4. 统计记录。完成对各门功课最高分和不及格人数的统计。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define LEN sizeof(Student)
typedef struct student
{
int num;
char name[20];
int score[4];
int sum;
struct student *next;
}Student;
int n;
Student *cin(void);
Student *sort_1(Student *head,int);
void sort_2(Student *head);
void print(Student *head);
Student *sort_all(Student *head);
void find(Student *head);
Student *add_new(Student *head);
Student *cin()
{
int flag;
Student *head,*p1,*p2;
n=0;
head=(Student *)malloc(LEN);
p2=head;
printf("\n请输入第%d名学生的学号,学号为0表示结束输入:",n+1);
scanf("%d",&flag);
while(getchar()!='\n');
for(;flag;)
{
n++;
p1=(Student *)malloc(LEN);
p1->num=flag;
printf("请输入第%d名学生的姓名:",n);
scanf("%s",p1->name);
printf("请输入第%d名学生的语文成绩:",n);
scanf("%d",&p1->score[0]);
printf("请输入第%d名学生的数学成绩:",n);
scanf("%d",&p1->score[1]);
printf("请输入第%d名学生的英语成绩:",n);
scanf("%d",&p1->score[2]);
printf("请输入第%d名学生的计算机成绩:",n);
scanf("%d",&p1->score[3]);
p1->sum=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3];
p2->next=p1;
p2=p1;
printf("\n请输入第%d名学生的学号,没有此学生则输入0表示结束:",n+1);
scanf("%d",&flag);
}
p2->next=NULL;
printf("\n\n");
return head;
}
Student *sort_all(Student *head)
{
int choose;
for(;;)
{
printf("\n\t\t# # # # # 学生成绩统计排序 # # # #\n");
printf("\t\t#\t1.按学生学号排序\t #\n");
printf("\t\t#\t2.按学生总分排序\t #\n");
printf("\t\t#\t3.按学生语文成绩排序\t #\n");
printf("\t\t#\t4.按学生数学成绩排序\t #\n");
printf("\t\t#\t5.按学生英语成绩排序\t #\n");
printf("\t\t#\t6.按学生计算机成绩排序\t #\n");
printf("\t\t#\t7.单科高分及均分\t #\n");
printf("\t\t#\t8.显示当前学生成绩\t #\n");
printf("\t\t#\t0.返回上一级菜单\t #\n");
printf("\t\t# # # # # 由himpo友情提供# # # # #\n\n");
printf("请输入你要执行的操作:");
scanf("%d",&choose);
while(getchar()!='\n');
switch(choose)
{
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:head=sort_1(head,choose);break;
case 7:print(head);sort_2(head);break;
case 8:print(head);break;
case 0:return head;
default: printf("\n\n您的输入有误!请重新输入:\n\n");break;
}
}
}
Student *sort_1(Student *head,int choose)
{
Student *p1,*p2=head->next,*pm,*px;
Student mid;
if (!p2) return head;
for(p1=p2;p1->next!=NULL;p1=p1->next)
{
pm=p1;
for(p2=p1->next;p2!=NULL;p2=p2->next)
switch(choose)
{
case 1:if (pm->num>p2->num) pm=p2;break;
case 2:if (pm->sum<p2->sum) pm=p2;break;
case 3:if (pm->score[0]<p2->score[0]) pm=p2;break;
case 4:if (pm->score[1]<p2->score[1]) pm=p2;break;
case 5:if (pm->score[2]<p2->score[2]) pm=p2;break;
case 6:if (pm->score[3]<p2->score[3]) pm=p2;break;
}
if (pm!=p1)
{
mid=*pm;
*pm=*p1;
*p1=mid;
px=pm->next;
pm->next=p1->next;
p1->next=px;
}
}
printf("\n排序后的成绩表为:\n");
print(head);
return head;
}
void sort_2(Student *head)
{
Student *p=head->next;
int max_1,max_2,max_3,max_4,min_1,min_2,min_3,min_4;
int max_sum,min_sum;
int sum_1=0,sum_2=0,sum_3=0,sum_4=0;
float aver_1,aver_2,aver_3,aver_4,aver_sum;
if (!p) return;
max_1=min_1=p->score[0];max_2=min_2=p->score[1];
max_3=min_3=p->score[2];max_2=min_2=p->score[3];
max_sum=min_sum=p->sum;
for(;p;p=p->next)
{
if (max_1<p->score[0]) max_1=p->score[0];
else if (min_1>p->score[0]) min_1=p->score[0];
if (max_2<p->score[1]) max_2=p->score[1];
else if (min_2>p->score[1]) min_2=p->score[1];
if (max_3<p->score[2]) max_3=p->score[2];
else if (min_3>p->score[2]) min_3=p->score[2];
if (max_4<p->score[3]) max_4=p->score[3];
else if (min_4>p->score[3]) min_4=p->score[3];
if (max_sum<p->sum) max_sum=p->sum;
else if (min_sum>p->sum) min_sum=p->sum;
sum_1+=p->score[0];sum_2+=p->score[1];sum_3+=p->score[2];sum_4+=p->score[3];
}
aver_1=1.0*sum_1/n;aver_2=1.0*sum_2/n;aver_3=1.0*sum_3/n;aver_4=1.0*sum_4/n;
aver_sum=aver_1+aver_2+aver_3+aver_4;
printf("总共%d名学生,具体数据为:\n",n);
printf("语文最高分为%d,最低分为%d,平均分为%.2f\n",max_1,min_1,aver_1);
printf("数学最高分为%d,最低分为%d,平均分为%.2f\n",max_2,min_2,aver_2);
printf("英语最高分为%d,最低分为%d,平均分为%.2f\n",max_3,min_3,aver_3);
printf("计算机最高分为%d,最低分为%d,平均分为%.2f\n",max_4,min_4,aver_4);
printf("总分最高分为%d,最低分位%d,平均分为%.2f\n",
max_sum,min_sum,aver_sum);
}
void find(Student *head)
{
Student *p;
int choose,fnum;
char tem[20];
if (n==0) {printf("\n当前系统没有任何学生数据,您就别费劲了!\n ");return;}
for(;;)
{
printf("\n请输入您要查询学生的方式:\n\n");
printf("1、按学号查询;2、按姓名查询;0、我不查询了。\n\n");
printf("请选择:");
scanf("%d",&choose);
while(getchar()!='\n');
if (choose==1)
{
printf("\n请输入你要查询的学生的学号,输入0退出学号查询:");
scanf("%d",&fnum);
for(;fnum;)
{
for(p=head->next;p!=NULL&&p->num!=fnum;p=p->next);
if (!p)
{
printf("\n\n找不到你要查询的学号,请重新输入,输入0表示结束:");
scanf("%d",&fnum);
}
else if (p->num==fnum)
{
printf("\n学号为%d学生的数据为:\n",p->num);
printf("学号\t姓名\t语文成绩 数学成绩 英语成绩 计算机\
成绩 总分\n");
printf("%d\t%s\t %d %d %d %d \
%d\n",p->num,
p->name,p->score[0],p->score[1],p->score[2],p->score[3],
p->sum);
printf("\n\n请输入你还要查询的学生的学号,输入0表示不按学\
号查询了:");
scanf("%d",&fnum);
}
}
}
else if (choose==2)
{
printf("\n请输入你要查询的学生的姓名,输入0退出姓名查询:");
scanf("%s",tem);
for(;strcmp(tem,"0");)
{
for(p=head->next;p!=NULL&&strcmp(p->name,tem);p=p->next);
if (!p)
{
printf("\n\n找不到你要查询的姓名,请重新输入,输入0表\
示结束:");
scanf("%s",tem);
}
else if (!strcmp(p->name,tem))
{
printf("\n姓名为%s学生的数据为:\n",p->name);
printf("学号\t姓名\t语文成绩 数学成绩 英语成绩 \
计算机成绩 总分\n");
printf("%d\t%s\t %d %d %d \
%d %d\n",
p->num,p->name,p->score[0],p->score[1],p->score[2],
p->score[3],p->sum);
printf("\n\n请输入你还要查询的学生的姓名,输入0表\
示不按姓名查询了:");
scanf("%s",tem);
}
}
}
else if (choose==0) {printf("\n你选择了不查询!\n");break;}
else {printf("\n你以其他方式选择了不查询!\n");break;}
}
}
Student *add_new(Student *head)
{
Student *p;
int flag;
printf("\n\n请输入你要新加入学生的学号,学号为0表示结束输入:");
scanf("%d",&flag);
while(getchar()!='\n');
for(;flag;)
{
p=(Student *)malloc(LEN);
p->num=flag;
printf("请输入新加入学生的姓名:",n);
scanf("%s",p->name);
printf("请输入新加入学生的语文成绩:",n);
scanf("%d",&p->score[0]);
printf("请输入新加入学生的数学成绩:",n);
scanf("%d",&p->score[1]);
printf("请输入新加入学生的英语成绩:",n);
scanf("%d",&p->score[2]);
printf("请输入第%d名学生的计算机成绩:",n);
scanf("%d",&p->score[3]);
p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3];
p->next=head->next;
head->next=p;
n++;
printf("\n请输入还要加入学生的学号,没有此学生则输入0表示结束:");
scanf("%d",&flag);
}
head=sort_1(head,1);
printf("加入后的成绩表为:\n");
print(head);
return head;
}
void print(Student *head)
{
Student *p=head->next;
if (!p) {printf("\n\n此系统目前没有任何学生数据!\n\n\n");return;}
printf("此系统目前共计学生%d名:\n",n);
printf("**************************学生成绩统计一览************************\
*****\n");
printf("学号\t姓名\t语文成绩 数学成绩 英语成绩 计算机成绩 总分\n");
for(;p;p=p->next)
printf("%d\t%s\t %d %d %d %d %d\n",
p->num,p->name,
p->score[0],p->score[1],p->score[2],p->score[3],
p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3]);
printf("************************此软件由himpo友情提供*************************\
*\n\n");
}
int main()
{
Student *head;
int choose,i;
head=(Student *)malloc(LEN);
head->next=NULL;
for(;;)
{
printf("\n\t\t* * * * * 学生成绩管理系统 * * * *\n");
printf("\t\t*\t1.学生数据键盘录入\t *\n");
printf("\t\t*\t2.学生数据统计排序\t *\n");
printf("\t\t*\t3.查询学生数据\t\t *\n");
printf("\t\t*\t4.插入学生数据\t\t *\n");
printf("\t\t*\t5.显示当前成绩表\t *\n");
printf("\t\t*\t0.退出成绩管理系统\t *\n");
printf("\t\t* * * * * 由himpo友情提供* * * * *\n\n");
printf("\n请输入你要执行的操作:");
scanf("%d",&choose);
while(getchar()!='\n');
switch(choose)
{
case 1:printf("\n\t\t\t\t****注意****");
printf("\n\n 此选项将会建立新的学生数据系统 ,原来的数据将\
不再存在,你确信要删除原来的数据并建立新的数据系统么?\n\n");
printf("1、建立新的数据系统;0、放弃建立新的数据系统。\n\n");
printf("请选择:");
scanf("%d",&i);
if (i==1) {head=cin();print(head);break;}
else if (i==0)
{
printf("\n你选择了放弃建立新的数据系统!\n");
break;
}
else {
printf("\n你做出别的选择,当作放弃建立!\n");
break;
}
case 2:head=sort_all(head);break;
case 3:find(head);break;
case 4:head=add_new(head);
case 5:print(head);break;
case 0:system("pause");return 0;
default: printf("\n\n您的输入有误!请重新输入:\n\n");break;
}
}
}
㈢ 设计学生成绩管理系统
#include #include #include #define MAX 1000 /*定义学生成绩信息结构*/ struct stu { char id[8]; char name[8]; double Chinese; double Math; double English; double average; double total; }; /*学生结构数组,用于存储学生成绩信息*/ struct stu students[MAX]; /*当前学生人数*/ int current; void input() { int i; printf("请输入学生人数:"); scanf("%d", & current); for (i = 0; i < current; i++) { printf("\n请输入学生学号,最多为7位数: "); scanf("%s", students[i].id); printf("请输入学生姓名:"); scanf("%s", students[i].name); printf("请输入语文成绩:"); scanf("%lf", &students[i].Chinese); printf("请输入数学成绩:"); scanf("%lf", &students[i].Math); printf("请输入英语成绩:"); scanf("%lf", &students[i].English); students[i].total = students[i].Chinese + students[i].Math + students[i].English; students[i].average = students[i].total / 3; } } /*排名次,即对学生结构数组排序*/ void sort(struct stu array[], int n) { int i, j; struct stu temp; for (i = 0; i < n; i++) { for (j = i+1; j < n; j++) { if (array[i].average - array[j].average < 1e-16) { temp = array[i]; array[i] = array[j]; array[j] = temp; } } } } /*统计平均成绩,并输出各分数段的人数*/ void print_score(struct stu array[], int n) { int i; double ave = 0; int sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0; for (i = 0; i < n; i++) { ave += array[i].average; switch ((int)(array[i].average / 10)) { case 10: case 9: sum1++; break; case 8: sum2++; break; case 7: case 6: sum3++; break; default: sum4++; } } printf("全班的平均分为:%.1f\n", ave/n); printf("平均分在90分以上的人数为:%d\n", sum1); printf("平均分在80~89的人数为:%d\n", sum2); printf("平均分在60~79的人数为:%d\n", sum3); printf("平均分在60分以下的人数为:%d\n", sum4); } /*输出不及格科目及学生名单*/ void print_unreach(struct stu array[], int n) { int i; printf("科目\t学号\t名字\n"); for (i = 0; i < n; i++) { if (array[i].Chinese < 60) { printf("语文\t%s\t%s\n", array[i].id, array[i].name); } if (array[i].Math < 60) { printf("数学\t%s\t%s\n", array[i].id, array[i].name); } if (array[i].English 60) { printf("英语\t%s\t%s\n", array[i].id, array[i].name); } } } /*打印优等生名单*/ void print_good(struct stu array[], int n) { int i; char mark = 0; if (n > 3) { n = 3; } printf("学号\t姓名\t语文\t数学\t英语\t平均分\t名次\n"); for (i = 0; i n; i++) { if ((array[i].Chinese > 60) && (array[i].Math > 60) && (array[i].English > 60)) { if (array[i].average > 90) mark = 1; else if (array[i].average > 85) { if (array[i].Chinese == 100) mark = 1; if (array[i].Math == 100) mark = 1; if (array[i].English == 100) mark = 1; if (array[i].Chinese > 95 && array[i].English > 95) mark = 1; if (array[i].Chinese > 95 && array[i].Math > 95) mark = 1; if (array[i].Math > 95 && array[i].English > 95) mark = 1; } if (mark == 1) { printf("%s\t%s\t", array[i].id, array[i].name); printf("%.f\t%.f\t%.f\t%.1f\t", array[i].Chinese, array[i].Math, array[i].English, array[i].average); printf("%d\n", i+1); } } } } /*按学生姓名查询成绩*/ void search_name(struct stu array[], int n, char* name) { int i; char mark = 1; for (i = 0; i < n; i++) { if (strcmp(name, array[i].name) == 0) { printf("学生姓名:%s\n", name); printf("学生学号:%s\n", array[i].id); printf("语文:%.f\n", array[i].Chinese); printf("数学:%.f\n", array[i].Math); printf("英语:%.f\n", array[i].English); printf("平均分:%.1f\n", array[i].average); mark = 0; } } if (mark == 1) puts("不存在该学生记录"); } /*按学生学号查询成绩*/ void search_id(struct stu array[], int n, char* id) { int i; char mark = 1; for (i = 0; i < n; i++) { if (strcmp(id, array[i].id) == 0) { printf("学生姓名:%s\n", array[i].name); printf("学生学号:%s\n", array[i].id); printf("语文:%.f\n", array[i].Chinese); printf("数学:%.f\n", array[i].Math); printf("英语:%.f\n", array[i].English); printf("平均分:%.1f\n", array[i].average); mark = 0; break; } } if (mark == 1) puts("不存在该学生记录"); } void print_menu() { system("cls"); printf("1.输入学生信息\n"); puts("2.统计全班学生成绩"); puts("3.按学号查询学生成绩"); puts("4.按姓名查询学生成绩"); puts("5.输出不及格情况"); puts("6.输出优等生名单"); puts("0.退出本程序"); printf("\n\n 请输入你的选择:"); } int main(int argc, char **argv) { char ch = 0; char id[8], name[8]; while (ch != '0') { print_menu(); ch = getchar(); switch (ch) { case '1': { system("cls"); input(); sort(students, current); break; } case '2': { system("cls"); print_score(students, current); break; } case '3': { system("cls"); printf("请输入学号:"); scanf("%s", id); search_id(students, current, id); break; } case '4': { system("cls"); printf("请输入姓名:"); scanf("%s", name); search_name(students, current, name); break; } case '5': { system("cls"); print_unreach(students, current); break; } case '6': { system("cls"); print_good(students, current); break; } case '0': exit(0); } printf("\n\n按任意键返回主菜单……"); getchar(); getchar(); } return 0; }
㈣ 学生成绩管理系统的设计与实现
给一个我以前写过的吧,功能应该差不多#include #include #include #include #include #include #include #include #include using namespace std;/*定义学生结构体*/struct Student{ char ID[20]; char Name[20]; float Mark1; float Mark2; float Mark3; float Average;};/*声明学生数组及学生数量*/struct Student students[1000];int num=0; /*求平均值*/float Avg(struct Student stu){ return (stu.Mark1+stu.Mark2+stu.Mark3)/3;} /*通过学号返回数组下标*/int Student_SearchByIndex(char id[]){ int i; for (i=0;i
㈤ 学生成绩管理系统设计C++
#include<iostream>
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<iomanip>
using namespace std;
typedef struct
{
char num[10];
char cla[10];
char name[20];
char chian[10];
char shuxue[20];
char english[10];
char jsj[20];
}Student;
Student stu[80];
int menu()
{
char c;
for(;c<'0'||c>'9';)
{
system("cls");
cout<<"欢迎使用我们的程序。"<<endl;
cout<<"编程人员:彭正直,段传奇,赖胜莲,张弋寒,杨斌,朴惠燕,赵晨春,于鹏龙,姜淼.";
cout<<endl;
cout<<"************** 学生成绩管理系统 ************** "<<endl;
cout<<setw(15)<<" "<<"1.输入学生信息"<<endl;
cout<<setw(15)<<" "<<"2.输出学生信息"<<endl;
cout<<setw(15)<<" "<<"3.排序"<<endl;
cout<<setw(15)<<" "<<"4.插入一条记录"<<endl;
cout<<setw(15)<<" "<<"5.按姓名查找,删除一条记录"<<endl;
cout<<setw(15)<<" "<<"6.查找并显示一个记录"<<endl;
cout<<setw(15)<<" "<<"7.按姓名修改一条记录"<<endl;
cout<<setw(15)<<" "<<"8.从文件中读入数据"<<endl;
cout<<setw(15)<<" "<<"0.储存数据并退出系统"<<endl;
cout<<setfill('*')<<setw(48)<<"*"<<endl;
cout<<setw(15)<<" ";
cout<<"请选择(0-10):";
c=getchar();
}
return(c-'0');
}
int Input(Student stud[],int n) //输入数据。
{
int i=0;
char sign,x[10];
for(;sign != 'n' && sign != 'N';)
{
cout<<setw(15)<<" "<<"班级:";
cin>>stud[n+i].cla;
cout<<setw(15)<<" "<<"学号:";
cin>>stud[n+i].num;
cout<<setw(15)<<" "<<"姓名:";
cin>>stud[n+i].name;
cout<<setw(15)<<" "<<"语文:";
cin>>stud[n+i].chian;
cout<<setw(15)<<" "<<"数学:";
cin>>stud[n+i].shuxue;
cout<<setw(15)<<" "<<"英语:";
cin>>stud[n+i].english;
cout<<setw(15)<<" "<<"计算机:";
cin>>stud[n+i].jsj;
gets(x);
cout<<setw(10)<<" ";
cout<<"还有要输入的信息吗?(y/n)";
cin>>&sign;
i++;
}
return(n+i);
}
void Display(Student stud[], int n) //输出数据。
{
int i;
cout<<setw(15)<<" "<<setfill('-')<<setw(65)<<"-"<<endl;
cout<<setw(15)<<" "<<"班级 学号 姓名 语文 数学 英语 计算机"<<endl;
cout<<setw(15)<<" ";
cout<<setfill('-')<<setw(65)<<"-"<<endl;
for(i=1;i<n+1;i++)
{
printf("\t\t%-9s%-9s%-9s%-9s%-9s%-9s%-9s\n",stud[i-1].cla,stud[i-1].num,stud[i-1].name,stud[i-1].chian,stud[i-1].shuxue,stud[i-1].english,stud[i-1].jsj);
if(i>1 && i%10==0)
{
cout<<setw(15)<<" "<<setfill('-')<<setw(35)<<"-"<<endl;
cout<<setw(15)<<" ";
system("pause");
cout<<setw(15)<<" "<<setfill('-')<<setw(35)<<"-"<<endl;
}
}
cout<<setw(15)<<" ";
system("pause");
}
void Sort(Student stud[],int n) //按名字排序。
{
int i,j;
char t[20];
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(strcmp(stud[j].num,stud[j+1].num)>0)
{
strcpy(t,stud[j+1].cla);
strcpy(stud[j+1].cla,stud[j].cla);
strcpy(stud[j].cla,t);
strcpy(t,stud[j+1].num);
strcpy(stud[j+1].num,stud[j].num);
strcpy(stud[j].num,t);
strcpy(t,stud[j+1].name);
strcpy(stud[j+1].name,stud[j].name);
strcpy(stud[j].name,t);
strcpy(t,stud[j+1].chian);
strcpy(stud[j+1].name,stud[j].chian);
strcpy(stud[j].chian,t);
strcpy(t,stud[j+1].shuxue);
strcpy(stud[j+1].name,stud[j].shuxue);
strcpy(stud[j].shuxue,t);
strcpy(t,stud[j+1].english);
strcpy(stud[j+1].name,stud[j].english);
strcpy(stud[j].english,t);
strcpy(t,stud[j+1].jsj);
strcpy(stud[j+1].name,stud[j].jsj);
strcpy(stud[j].jsj,t);
}
cout<<setw(15)<<" "<<"排序成功!"<<endl;
}
int Insert(Student stud[],int n) //插入一条学生信息。
{
char x[10];
cout<<setw(15)<<" "<<"班级:";
cin>>stud[n].cla;
cout<<setw(15)<<" "<<"学号:";
cin>>stud[n].num;
cout<<setw(15)<<" "<<"姓名:";
cin>>stud[n].name;
cout<<setw(15)<<" "<<"语文:";
cin>>stud[n].chian;
cout<<setw(15)<<" "<<"数学:";
cin>>stud[n].shuxue;
cout<<setw(15)<<" "<<"英语:";
cin>>stud[n].english;
cout<<setw(15)<<" "<<"计算机:";
cin>>stud[n].jsj;
gets(x);
n++;
cout<<setw(15)<<" "<<"插入记录成功!"<<endl;
return(n);
}
int Delete(Student stud[],int n) //按名字查找信息,删除信息。
{
char s[20];
int i=0,j;
cin>>s;
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判断*/
if(i==n)
{
printf("\t\t\t没有发现!\n"); /*返回失败信息*/
return(n);
}
for(j=i;j<n-1;j++) /*删除操作*/
{
strcpy(stud[j].num,stud[j+1].num);
strcpy(stud[j].name,stud[j+1].name);
strcpy(stud[j].cla,stud[j+1].cla);
strcpy(stud[j].chian,stud[j+1].chian);
strcpy(stud[j].shuxue,stud[j+1].shuxue);
strcpy(stud[j].english,stud[j+1].english);
strcpy(stud[j].jsj,stud[j+1].jsj);
}
cout<<setw(15)<<" "<<"当前信息已删除成功!"<<endl; /*返回成功信息*/
return(n-1);
}
void Query(Student stud[],int n) //按名字查找信息
{
char s[20];
int i=0;
cout<<setw(15)<<" "<<"输入他(她)的姓名:";
cin>>s;
while(strcmp(stud[i].name,s)!=0&&i<n)
i++; /*查找判断*/
if(i==n)
{
printf("\t\t\t没有发现!\n"); /*输入失败信息*/
return;
}
cout<<setw(15)<<" "<<"学号:"<<stud[i].num<<endl;
cout<<setw(15)<<" "<<"语文:"<<stud[i].chian<<endl;
cout<<setw(15)<<" "<<"数学:"<<stud[i].shuxue<<endl;
cout<<setw(15)<<" "<<"英语:"<<stud[i].english<<endl;
cout<<setw(15)<<" "<<"计算机:"<<stud[i].jsj<<endl;
}
int Xiugai(Student stud[],int n) //修改信息。
{
n=Delete(stud,n);
cout<<setw(15)<<" "<<"输入你要修改的学生信息"<<endl;
n=Insert(stud,n);
cout<<setw(15)<<" "<<"修改完成"<<endl;
return(n);
}
int AddfromText(Student stud[], int n) //从文件中读入数据。
{
int i=0,num;
FILE *fp;
char filename[20];
cout<<setw(15)<<" "<<"输入文件名:";
cin>>filename;
if((fp=fopen(filename,"rb"))==NULL)
{
cout<<setw(15)<<" "<<"无法打开文件"<<endl;
cout<<setw(15)<<" ";
system("pause");
return(n);
}
fscanf(fp,"%d",&num);
for(;i<num;)
{
fscanf(fp,"%s%s%s%s%s%s%s",stud[n+i].cla,stud[n+i].num,stud[n+i].name,stud[n+i].chian,stud[n+i].shuxue,stud[n+i].english,stud[n+i].jsj);
i++;
}
n+=num;
fclose(fp);
cout<<setw(15)<<" "<<"成功!"<<endl;
cout<<setw(15)<<" ";
system("pause");
return(n);
}
void WritetoText(Student stud[],int n) //将所有记录写入文件。
{
int i=0;
FILE *fp;
char filename[20];
cout<<setw(15)<<" "<<"将记录写人文件"<<endl;
cout<<setw(15)<<" "<<"输入文件名:";
cin>>filename;
if((fp=fopen(filename,"w"))==NULL)
{
cout<<setw(15)<<" "<<"无法打开文件"<<endl;
system("pause");
return;
}
fprintf(fp,"%d\n",n);
for(;i<n;)
{
fprintf(fp,"%-6s%-5s%-5s%-5s%-5s%-5s%-5s\n",stud[i].cla,stud[i].num,stud[i].name,stud[i].chian,stud[i].shuxue,stud[i].english,stud[i].jsj);
i++;
}
fclose(fp);
cout<<setw(15)<<" "<<"成功!"<<endl;
int b;
cout<<setw(15)<<" "<<"请确定是否退出系统:"<<endl;
cout<<setw(15)<<" "<<"0.退出系统"<<endl;
cout<<setw(15)<<" "<<"1.返回"<<endl;
cin>>b;
if(b==0)
{
cout<<setw(15)<<" "<<"谢谢使用!"<<endl;
cout<<setw(15)<<" ";
system("pause");
exit(0);
}
}
void main() //主函数调用。
{
int n=0;
for(;;)
{
switch(menu())
{
case 1:
cout<<setw(15)<<" "<<"输入信息"<<endl;
n=Input(stu,n);
break;
case 2:
cout<<setw(15)<<" "<<"输出所有记录"<<endl;
Display(stu,n);
break;
case 3:
cout<<setw(15)<<" "<<"排序"<<endl;
Sort(stu,n);
cout<<setw(15)<<" ";
system("pause");
break;
case 4:
cout<<setw(15)<<" "<<"插入一条记录"<<endl;
n=Insert(stu,n);
cout<<setw(15)<<" ";
system("pause");
break;
case 5:
cout<<setw(15)<<" "<<"删除一条记录"<<endl;
cout<<setw(15)<<" "<<"输入他(她)的姓名:";
n=Delete(stu,n);
cout<<setw(15)<<" ";
system("pause");
break;
case 6:
cout<<setw(15)<<" "<<"查找"<<endl;
Query(stu,n);
cout<<setw(15)<<" ";
system("pause");
break;
case 7:
cout<<setw(15)<<" "<<"修改"<<endl;
cout<<setw(15)<<" "<<"输入你要修改的学生的姓名:";
n=Xiugai(stu,n);
system("pause");
break;
case 8:
cout<<setw(15)<<" "<<"从文件中读入数据"<<endl;
n=AddfromText(stu,n);
break;
case 0:
cout<<setw(15)<<" "<<"将所有记录写入文件"<<endl;
WritetoText(stu,n);
cout<<setw(15)<<" ";
system("pause");
break;
}
}
}
㈥ 用C语言设计一个学生成绩管理系统
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#defineMAX1000
/*定义学生成绩信息结构*/
struct stu
{
char id[8];
char name[8];
(6)学生成绩管理系统设计扩展阅读:
short:修饰int,短整型数据,可省略被修饰的int。(K&R时期引入)
long:修饰int,长整型数据,可省略被修饰的int。(K&R时期引入)
long long:修饰int,超长整型数据,可省略被修饰的int。(C99标准新增)
signed:修饰整型数据,有符号数据类型。(C89标准新增)
unsigned:修饰整型数据,无符号数据类型。(K&R时期引入)
restrict:用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式。(C99标准新增)
复杂类型关键字
struct:结构体声明。(K&R时期引入)
union:联合体声明。(K&R时期引入)
enum:枚举声明。(C89标准新增)
typedef:声明类型别名。(K&R时期引入)
sizeof:得到特定类型或特定类型变量的大小。(K&R时期引入)
inline:内联函数用于取代宏定义,会在任何调用它的地方展开。(C99标准新增)
㈦ 学生成绩管理系统设计
你把有的课程名字改一下,或者添加一些东西,在结构体定义那里
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct stu
{
int num;
int wuli;
int huaxue;
int math;
};
FILE *fp;
//添加学生信息,可以排除与已存的冲突;
void add()
{
int a,b,c,d,n=0;
struct stu student;
fp=fopen("score.txt","r+");
printf("请输入要添加学生的学号、物理成绩、化学成绩及数学成绩\n");
scanf("%d%d%d%d",&student.num,&student.wuli,&student.huaxue,&student.math);
while(!feof(fp))
{
fscanf(fp,"%d%d%d%d",&a,&b,&c,&d);
if(student.num==a)
{
printf("该学生信息已存在,不需要添加\n");
fclose(fp);
n=1;
break;
}
}
if(n==0)
{
printf("信息库中没有该学生信息,可以添加\n");
fseek(fp,0,2);//文件末尾添加;
fprintf(fp,"%d\t%d\t%d\t%d\n",student.num,student.wuli,student.huaxue,student.math);
fclose(fp);
}
}
//修改学生信息;
void modify()
{
int n=0,number,a,b,c,d,offset;
struct stu student;
fp=fopen("score.txt","r+");
if(fp==NULL)
{
printf("信息库为空\n");
exit(0);
}
printf("请输入要修改学生的学号\n");
scanf("%d",&number);
while(!feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%d%d%d%d",&a,&b,&c,&d);
if(number==a)
{
printf("该学生信息为:\n");
printf("%d\t%d\t%d\t%d\n",a,b,c,d);
printf("请输入要修改的信息\n");
scanf("%d%d%d%d",&student.num,&student.wuli,&student.huaxue,&student.math);
fseek(fp,offset,0);
fprintf(fp,"%d\t%d\t%d\t%d\n",student.num,student.wuli,student.huaxue,student.math);
n=1;
break;
}
}
if(n==0)
{
printf("该学生信息不存在\n");
}
fclose(fp);
}
//删除学生信息;
void del()
{
int n=0,number,a,b,c,d,m,offset;
fp=fopen("score.txt","r+");
if(fp==NULL)
{
printf("信息库为空\n");
exit(0);
}
printf("请输入删除学生的学号\n");
scanf("%d",&number);
while(!feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%d%d%d%d",&a,&b,&c,&d);
if(number==a)
{
printf("该学生信息为:\n");
printf("%d\t%d\t%d\t%d\n",a,b,c,d);
printf("是否要删除该学生信息,是:1 ;否:0\n");
scanf("%d",&m);
if(m)
{
fseek(fp,offset,0);
fprintf(fp,"%s\t%s\t%s\t%s"," "," "," "," ");
printf("\n");
printf("该学生信息已删除\n");
}
else printf("您已放弃删除该学生信息\n");
n=1;
break;
}
}
if(n==0)
{
printf("该学生信息不存在\n");
}
fclose(fp);
}
//查找学生信息;
void search()
{
int n=0,number,a,b,c,d,m;
char s[10];
fp=fopen("score.txt","r+");
if(fp==NULL)
{
printf("信息库为空\n");
exit(0);
}
printf("请选择查找方式:1--按学号查找;0--按学科查找\n");
scanf("%d",&m);
if(m)
{
printf("请输入要查找学生的学号\n");
scanf("%d",&number);
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
{
if(number==a)
{
printf("已找到,该学生信息为:\n");
printf("%s %s %s %s\n","学号","物理成绩","化学成绩","数学成绩");
printf("%d\t %d\t %d\t %d\n",a,b,c,d);
n=1;
break;
}
}
if(n==0)
{
printf("该学生信息不存在\n");
}
fclose(fp);
}
else
{
printf("请输入要查找的学科\n");
scanf("%s",s);
if(strcmp(s,"wuli")==0)
{
printf("学号\t物理成绩\n");
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
printf("%d\t%d\n",a,b);
fclose(fp);
}
if(strcmp(s,"huaxue")==0)
{
printf("学号\t化学成绩\n");
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
printf("%d\t%d\n",a,c);
fclose(fp);
}
if(strcmp(s,"math")==0)
{
printf("学号\t数学成绩\n");
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
printf("%d\t%d\n",a,d);
fclose(fp);
}
if(strcmp(s,"wuli")&&strcmp(s,"huaxue")&&strcmp(s,"math") )
{
printf("错误,要查找的学科不存在\n");
fclose(fp);
}
}
}
//统计学生信息;
void tongji()
{
int n=0,a,b,c,d,m,k,x[100],i,j,l=1;
float sum=0,h[100],k1;
fp=fopen("score.txt","r+");
if(fp==NULL)
{
printf("信息库为空\n");
exit(0);
}
printf("0--统计单科平均成绩\n");
printf("1--统计单个学生的平均成绩和总成绩,对学生排名\n");
printf("请选择统计类型\n");
scanf("%d",&m);
if(!m)
{
printf("1--统计物理的平均成绩\n");
printf("2--统计化学的平均成绩\n");
printf("3--统计数学的平均成绩\n");
printf("请选择要统计的学科\n");
scanf("%d",&m);
if(m==1)
{
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
{
sum=sum+b;
n++;
}
printf("物理的平均成绩为 %2.2f\n",sum/n);
fclose(fp);
}
if(m==2)
{
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
{
sum=sum+c;
n++;
}
printf("化学的平均成绩为 %.2f\n",sum/n);
fclose(fp);
}
if(m==3)
{
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
{
sum=sum+d;
n++;
}
printf("数学的平均成绩为 %.2f\n",sum/n);
fclose(fp);
}
}
else
{
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
{
h[n]=(float)(b+c+d);
x[n]=a;
n++;
}
for(i=0;l==1&&i<n-1;i++)
{
l=0;
for(j=0;j<n-1-i;j++)
{
if(h[j]>h[j+1])
{
k1=h[j];
h[j]=h[j+1];
h[j+1]=k1;
k=x[j];
x[j]=x[j+1];
x[j+1]=k;
l=1;
}
}
}
printf("排序后\n");
printf("学号\t总成绩\t平均成绩\n");
for(i=0;i<n;i++)
printf("%d\t%3.0f\t%.2f\n",x[i],h[i],h[i]/3.0);
}
fclose(fp);
}
void main()
{
int m;
/*fp=fopen("score.txt","w");
fprintf(fp,"%s\t%s\t%s\t%s\n","学号","物理成绩","化学成绩","数学成绩");
fclose(fp);*/
while(1)
{
printf("\n\t\t*********欢迎使用学生信息管理系统*********\n\n");
printf("\n\t\t添加,请按1");
printf("\n\t\t修改,请按2");
printf("\n\t\t删除,请按3");
printf("\n\t\t查询,请按4");
printf("\n\t\t统计,请按5");
printf("\n\t\t退出,请按0\n");
printf("\n\t\t********************************************\n\n");
printf("Please select(0--5):");
scanf("%d",&m);
if(m>=0&&m<=5)
{
switch(m)
{
case 1: add();
break;
case 2: modify();
break;
case 3: del();
break;
case 4: search();
break;
case 5: tongji();
break;
case 0: exit(0);
}
printf("\n\n操作完毕,请再次选择!");
}
else
printf("\n\n选择错误,请再次选择!");
}
}
㈧ 学生成绩管理系统有什么设计原则
#包括
包括
结构学生{
诠释身份证;
字符名称[10];
诠释年龄
>字符性[10];
字符张谷[20];
整数分殊;
字符专业户[50];
} ST [50];
我= 0;
无效淑如(){
烧焦了;
做{
printf的(“\ n请输入学号:”);
scanf函数( “%d”,&ST [i]的ID);
fflush(stdin)中;
printf的(“\ n请输入你的名字:”);
获取(ST [I]名);
printf的(“\ n”);
printf的(“请输入年龄:”);
scanf的(“为%d”,&ST [i]的年龄); printf(“请\ n请输入性别:”);
得到(ST [I]。性);
fflush(stdin)中
fflush(stdin)中;
printf的(“\ n请输入院系:”);
得到(ST [I]。张谷);
printf的(“\ n请输入成绩:”);
scanf的(“%D”,ST [I]。分殊);
fflush(stdin)中;
printf的(“\ n请输入一个专业:);
获得(ST [I]。专业户);
printf的(“\ n是否继续输入学生信息?(Y / N)”);
fflush(stdin)中;
= getchar函数();
+ +;
}(A =='Y'&& <= 50);
}
BR />无效仙师()
年龄{
诠释;
printf的(“\ t学号\ t姓名\ t \ t性别\ t学院\ T专业\ T分数的\ n“);
为(J = 0; <; + +)
printf的(”\ t%D \ T%S \ T%D \ T%S \ t%的小号\ t%d \ t其中%s \ n“,
ST [J]。身份证,ST [J]。名称,ST [J]。年龄,ST [J]。性别,ST张谷[J]。 ,ST [J]。分殊,ST [J]。专业户);
}
无效叉着()
{
INT M
字符名称[20],B;
{
printf的(“\ n请输入要发现学生的姓名:”);
fflush(stdin)中;
获取(名称);
为(M = 0,M <I,M + +)
{
(STRCMP(名,ST [M]。名)== 0)
{
printf的(“\ n \你在位置%d的学生发现!!\ n”;,M +1); BR />打破;
}
}
(M> = 20)
printf的(“\ n \ t没有找到这个学生!\ n”); />其他
{
printf的(“学生编号性别年龄教师专业成绩”);
printf的(“\ t%D \ T%S \ T%D \ T%\吨%S \ T%d \ t其中%s \ n“,
ST [M]。身份证,ST [M]。名称,ST [M]。年龄,ST [M]。性别,ST [M]。张谷,ST [M]。分殊,ST [M]。专业户);
}
printf的(“\ n能否找到另一种是学生吗?(Y / N)”);
> fflush(stdin)中
B = getchar函数();
}而(B =='Y');
}
a>
无效闪出()
{
字符名称[20],C;
整数A,B;
{
输出(“\ n请输入你要删除的学生姓名:\ n”);
fflush(stdin)中
获取(名称);
(A = 0; <我一个+ +)
{
(STRCMP(名称,ST [A]。名)== 0)
打破;
}
/ a>(B = A,B <I,B + +)
ST [B] = ST [+1];
(A>;我)
printf的(“ \ T没有找到这名学生!!\ n“);
其他
{
-
仙师();
} BR />
printf的(“\ n是否继续删除另一名学生的信息?(Y / N)”);
fflush(stdin)中;
C = getchar函数(); BR />},而(C =='Y');
}
无效charu()
淑如( );
}
廉政的main()
{
诠释改变;
做{
系统(“CLS”);
printf的(“========================的====学生信息管理系统==== =============================== \ n“);
printf的(”\ t \ t:输入学生信息\ n“);
printf的(”\ t \ t:学生信息\ n“);
printf的(”
\ t \ t:查找学生信息\ n“);的printf (“\ t \ t:删除学生信息\ n”);
printf的(“\ t \ t五:插入学生信息\ n”);
printf的(“\ t \ t VI:退出程序\ n“);
fflush(stdin)中;
printf的(”\ t \ t请输入选项:);
scanf的(“%d”,&的变化);切换(改变)
{
案件1:
淑如();突破;
案例2:
仙师()突破;
案例3:
的叉着();突破;
情况4:
闪出();突破;
情况下,5:
charu();休息;
案例6:
突破;
}
}(change! = 6);
系统(“暂停”);
返回0;
}
,正如约瑟夫链表是相对简单的,你拿去做可以做到这一点。
㈨ 设计一个简单的学生成绩管理系统,
我没写,只能和你说说怎么写。
可以由类模板和数组写。
我说说类模板的吧。
定义一个Student类存放学生信息(姓名,初始排名,各科成绩,个人总分);
初始排名由输入顺序排,在计算名字的时候就可以通过冒泡排序。
在里面定义计算总分的函数。
下面定义一个Caozuo类,用学生链表的做。你可以去找下这个例子。
数组的就很简单了,你只要想想。先定义数组(姓名,成绩),总分就是个人每科成绩的和,下面5个函数都可以通过数组遍历实现。如
cout<<"请输入你要查询的学生的名字:"<<endl;
cin>>n;
for(int i=0;i<=Maxsize;i++)
{
if(Student[i].name==n)
Student[i].Print();
}
㈩ 简单的学生成绩管理系统的设计
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int shoudsave=0; /* */
struct student
{
char num[10];/* 学号 */
char name[20];
char sex[10];
int cgrade;
int mgrade;
int egrade;
int totle;
int ave;
char neartime[10];/* 最近更新时间 */
};
typedef struct node
{
struct student data;
struct node *next;
}Node,*Link;
void menu()
{
printf("********************************************************************************");
printf("\t1登记学生资料\t\t\t\t\t2删除学生资料\n");
printf("\t3查询学生资料\t\t\t\t\t4修改学生资料\n");
printf("\t5保存学生资料\t\t\t\t\t0退出系统\n");
printf("********************************************************************************\n");
}
void printstart()
{
printf("-----------------------------------------------------------------------\n");
}
void Wrong()
{
printf("\n=====>提示:输入错误!\n");
}
void Nofind()
{
printf("\n=====>提示:没有找到该学生!\n");
}
void printc() /* 本函数用于输出中文 */
{
printf(" 学号\t 姓名 性别 英语成绩 数学成绩 C语言成绩 总分 平均分\n");
}
void printe(Node *p)/* 本函数用于输出英文 */
{
printf("%-12s%s\t%s\t%d\t%d\t%d\t %d\t %d\n",p->data.num,p->data.name,p->data.sex,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave);
}
Node* Locate(Link l,char findmess[],char nameornum[]) /* 该函数用于定位连表中符合要求的接点,并返回该指针 */
{
Node *r;
if(strcmp(nameornum,"num")==0) /* 按学号查询 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.num,findmess)==0)
return r;
r=r->next;
}
}
else if(strcmp(nameornum,"name")==0) /* 按姓名查询 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.name,findmess)==0)
return r;
r=r->next;
}
}
return 0;
}
void Add(Link l) /* 增加学生 */
{
Node *p,*r,*s;
char num[10];
r=l;
s=l->next;
while(r->next!=NULL)
r=r->next; /* 将指针置于最末尾 */
while(1)
{
printf("请你输入学号(以'0'返回上一级菜单:)");
scanf("%s",num);
if(strcmp(num,"0")==0)
break;
while(s)
{
if(strcmp(s->data.num,num)==0)
{
printf("=====>提示:学号为'%s'的学生已经存在,若要修改请你选择'4 修改'!\n",num);
printstart();
printc();
printe(s);
printstart();
printf("\n");
return;
}
s=s->next;
}
p=(Node *)malloc(sizeof(Node));
strcpy(p->data.num,num);
printf("请你输入姓名:");
scanf("%s",p->data.name);
getchar();
printf("请你输入性别:");
scanf("%s",p->data.sex);
getchar();
printf("请你输入c语言成绩:");
scanf("%d",&p->data.cgrade);
getchar();
printf("请你输入数学成绩:");
scanf("%d",&p->data.mgrade);
getchar();
printf("请你输入英语成绩:");
scanf("%d",&p->data.egrade);
getchar();
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle / 3;
/* 信息输入已经完成 */
p->next=NULL;
r->next=p;
r=p;
shoudsave=1;
}
}
void Qur(Link l) /* 查询学生 */
{
int sel;
char findmess[20];
Node *p;
if(!l->next)
{
printf("\n=====>提示:没有资料可以查询!\n");
return;
}
printf("\n=====>1按学号查找\n=====>2按姓名查找\n");
scanf("%d",&sel);
if(sel==1)/* 学号 */
{
printf("请你输入要查找的学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("\t\t\t\t查找结果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else if(sel==2) /* 姓名 */
{
printf("请你输入要查找的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
printf("\t\t\t\t查找结果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else
Wrong();
}
void Del(Link l) /* 删除 */
{
int sel;
Node *p,*r;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:没有资料可以删除!\n");
return;
}
printf("\n=====>1按学号删除\n=====>2按姓名删除\n");
scanf("%d",&sel);
if(sel==1)
{
printf("请你输入要删除的学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:该学生已经成功删除!\n");
shoudsave=1;
}
else
Nofind();
}
else if(sel==2)
{
printf("请你输入要删除的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:该学生已经成功删除!\n");
shoudsave=1;
}
else
Nofind();
}
else
Wrong();
}
void Modify(Link l)
{
Node *p;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:没有资料可以修改!\n");
return;
}
printf("请你输入要修改的学生学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("请你输入新学号(原来是%s):",p->data.num);
scanf("%s",p->data.num);
printf("请你输入新姓名(原来是%s):",p->data.name);
scanf("%s",p->data.name);
getchar();
printf("请你输入新性别(原来是%s):",p->data.sex);
scanf("%s",p->data.sex);
printf("请你输入新的c语言成绩(原来是%d分):",p->data.cgrade);
scanf("%d",&p->data.cgrade);
getchar();
printf("请你输入新的数学成绩(原来是%d分):",p->data.mgrade);
scanf("%d",&p->data.mgrade);
getchar();
printf("请你输入新的英语成绩(原来是%d分):",p->data.egrade);
scanf("%d",&p->data.egrade);
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle/3;
printf("\n=====>提示:资料修改成功!\n");
shoudsave=1;
}
else
Nofind();
}
void Disp(Link l)
{
int count=0;
Node *p;
p=l->next;
if(!p)
{
printf("\n=====>提示:没有资料可以显示!\n");
return;
}
printf("\t\t\t\t显示结果\n");
printstart();
printc();
printf("\n");
while(p)
{
printe(p);
p=p->next;
}
printstart();
printf("\n");
}
void Tongji(Link l)
{
Node *pm,*pe,*pc,*pt,*pa; /* 用于指向分数最高的接点 */
Node *r=l->next;
if(!r)
{
printf("\n=====>提示:没有资料可以统计!\n");
return ;
}
pm=pe=pc=pt=pa=r;
while(r!=NULL)
{
if(r->data.cgrade>=pc->data.cgrade)
pc=r;
if(r->data.mgrade>=pm->data.mgrade)
pm=r;
if(r->data.egrade>=pe->data.egrade)
pe=r;
if(r->data.totle>=pt->data.totle)
pt=r;
if(r->data.ave>=pa->data.ave)
pa=r;
r=r->next;
}
printf("------------------------------统计结果--------------------------------\n");
printf("总分最高者:\t%s %d分\n",pt->data.name,pt->data.totle);
printf("平均分最高者:\t%s %d分\n",pa->data.name,pa->data.ave);
printf("英语最高者:\t%s %d分\n",pe->data.name,pe->data.egrade);
printf("数学最高者:\t%s %d分\n",pm->data.name,pm->data.mgrade);
printf("c语言最高者:\t%s %d分\n",pc->data.name,pc->data.cgrade);
printstart();
}
void Sort(Link l)
{
Link ll;
Node *p,*rr,*s;
ll=(Link)malloc(sizeof(Node)); /* 用于做新的连表 */
ll->next=NULL;
if(l->next==NULL)
{
printf("\n=====>提示:没有资料可以排序!\n");
return ;
}
p=l->next;
while(p)
{
s=(Node*)malloc(sizeof(Node)); /* 新建接点用于保存信息 */
s->data=p->data;
s->next=NULL;
rr=ll;
while(rr->next!=NULL && rr->next->data.totle>=p->data.totle)
rr=rr->next;
if(rr->next==NULL)
rr->next=s;
else
{
s->next=rr->next;
rr->next=s;
}
p=p->next;
}
free(l);
l->next=ll->next;
printf("\n=====>提示:排序已经完成!\n");
}
void Save(Link l)
{
FILE* fp;
Node *p;
int flag=1,count=0;
fp=fopen("c:\\student","wb");
if(fp==NULL)
{
printf("\n=====>提示:重新打开文件时发生错误!\n");
exit(1);
}
p=l->next;
while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)
{
p=p->next;
count++;
}
else
{
flag=0;
break;
}
}
if(flag)
{
printf("\n=====>提示:文件保存成功.(有%d条记录已经保存.)\n",count);
shoudsave=0;
}
fclose(fp);
}
int main()
{
Link l;/* 连表 */
FILE *fp; /* 文件指针 */
int sel;
char ch;
char jian;
int count=0;
Node *p,*r;
l=(Node*)malloc(sizeof(Node));
l->next=NULL;
r=l;
fp=fopen("C:\\student","rb");
if(fp==NULL)
{
printf("\n=====>提示:文件还不存在,是否创建?(y/n)\n");
scanf("%c",&jian);
if(jian=='y'||jian=='Y')
fp=fopen("C:\\student","wb");
else
exit(0);
}
printf("\n=====>提示:文件已经打开,正在导入记录......\n");
while(!feof(fp))
{
p=(Node*)malloc(sizeof(Node));
if(fread(p,sizeof(Node),1,fp)) /* 将文件的内容放入接点中 */
{
p->next=NULL;
r->next=p;
r=p; /* 将该接点挂入连中 */
count++;
}
}
fclose(fp); /* 关闭文件 */
printf("\n=====>提示:记录导入完毕,共导入%d条记录.\n",count);
while(1)
{
menu();
printf("请你选择操作:");
scanf("%d",&sel);
if(sel==0)
{
if(shoudsave==1)
{ getchar();
printf("\n=====>提示:资料已经改动,是否将改动保存到文件中(y/n)?\n");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(l);
}
printf("\n=====>提示:你已经退出系统,再见!\n");
break;
}
switch(sel)
{
case 1:Add(l);break; /* 增加学生 */
case 2:Del(l);break;/* 删除学生 */
case 3:Qur(l);break;/* 查询学生 */
case 4:Modify(l);break;/* 修改学生 */
case 5:Save(l);break;/* 保存学生 */
case 9:printf("\t\t\t==========帮助信息==========\n");break;
default: Wrong();getchar();break;
}
}
system("pause");
return 0;
}