| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6807 人关注过本帖
标题:学生成绩管理系统
只看楼主 加入收藏
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
 问题点数:0 回复次数:14 
学生成绩管理系统

要求:有10个学生、4门课程,可以求全班单科的平均分,某个人的多门课的平均分、有输入,显示,修改、删除、排序,查询数据等功能。 界面要求:全屏设计,提示信息准确汉化,所有功能可以反复使用,用菜单管理。 数据类型至少要用到结构体和数组,使用文件进行存储和管理。 程序如下: #include "stdlib.h" #include "string.h" #include "stdio.h" #define NULL 0 #define Q 10 #define LEN sizeof(struct student) struct student /*定义一个学生考试信息的结构体*/ {char name[Q]; /*用来存放姓名的*/ char sex[Q]; /*用来存放性别的*/ long id; /*用来存放准考证号的*/ int score[4]; /*用来存放分数的*/ int total; /*用来存放总分数的*/ int m_c; /*用来存放名次的*/ struct student *next;/*定义指向下一个结构体的指针*/ }; int n; /*用来统计考生人数的*/ char ch[Q]; /*用来存放姓名的*/ struct student *creat() /*定义一个指向struct student的结构体指针函数*creat()用来修改考生信息.*/ {int i; struct student *head,*p1,*p2;/*定义三个指向struct student的结构体指针*/ p1=p2=(struct student *)malloc(LEN);/*调用malloc()函数用来开辟一个新的存储单元*/ n=0; printf("请输入学生考试信息!\n"); printf("请在姓名处键以\"!\"结束输入。\n"); printf("姓名:"); scanf("%s",ch); head=NULL; /*给指针head赋初值*/ while (strcmp(ch,"!")!=0) /*调用字符比较函数strcmp()用来判断是否继续输入*/ {p1=(struct student *)malloc(LEN);/*调用malloc()函数用来开辟一个新的存储单元*/ strcpy(p1->name,ch); /*将循环结构前面输入的姓名复制到结构体名为p1的数组name中*/ printf("性别:"); scanf("%s",p1->sex); printf("准考证号(8位):"); scanf("%ld",&p1->id);/*将输入的准考证号存放到p1所指结构体的数组id中*/ printf("数学成绩:"); scanf("%d",&p1->score[0]);/*将输入的数学成绩存放到p1所指结构体的数组score中*/ printf("物理成绩:"); scanf("%d",&p1->score[1]);/*将输入的物理成绩存放到p1所指结构体的数组score中*/ printf("英语成绩:"); scanf("%d",&p1->score[2]);/*将输入的英语成绩存放到p1所指结构体的数组score中*/ printf("C语言成绩:"); scanf("%d",&p1->score[3]);/*将输入的C语言成绩存放到p1所指结构体的数组score中*/ p1->total=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3];/*计算总分 */ if(n==0)head=p1;/*如果是输入第一组学生考试信息就将指针p1赋给指针head*/ else p2->next=p1;/*否则将p1赋给p2所指结构体的next指针*/ p2=p1;/*将指针p1赋给指针p2*/ n++; /*将n的值加1*/ printf("姓名:"); scanf("%s",ch);/*将输入的姓名存放到字符数组ch中*/ } p2->next=NULL;/*将p2所指结构体的next指针重新赋空值*/ return (head);/*将输入的第一组学生考试信息返回*/ } void output(struct student *head) /*定义output()函数将考生的信息从头指针所指内容开始输出*/ {struct student *p;/*定义一个指向struct student的结构体指针p*/ printf("-----------------------------------------------------------------------\n"); printf(" *学生考试成绩信息表*\n"); printf("-----------------------------------------------------------------------\n"); /*71个“-”*/ printf("准考证号 姓 名 性别 数学 物理 英语 C语言 平均分 总分\n"); printf("-----------------------------------------------------------------------\n"); p=head;/*将头指针赋给p*/ if(head!=NULL)/*如果头指针非空则继续*/ do{printf("%8ld %6s %4s %2d %2d %2d %2d %-.2f %3d\n",p->id,p->name,p->sex,p->score[0],p->score[1],p->score[2],p->score[3],p->total/4.0,p->total); printf("-----------------------------------------------------------------------\n"); p=p->next;/*将下一组考生信息的next指针赋给p*/ }while(p!=NULL);/*若指针p非空则继续,目的是把所有的考生信息都传给指针p然后输出.*/ } count(struct student *head)/*定义函数count()统计考生总数*/ {if(head==NULL)return(0);/*若指针head为空返回值为0*/ else return(1+count(head->next));/*函数的递归调用*/ } struct student *insert(struct student*head) /*插入新结点定义一个指向struct student的结构体指针函数*insert()用来添加考生信息.*/ {struct student *p1,*p2,*p3;/*定义三个指向struct student的结构体指针*/ printf("请输入修改信息!\n"); p1=(struct student *)malloc(LEN); /*使p1指向插入的新结点*/ printf("准考证号(8位):"); scanf("%ld",&p1->id); /*将输入的准考证号存放到p1所指结构体的数组id中*/ printf("姓名:"); scanf("%s",p1->name); /*将输入的姓名存放到结构体名为p1的数组name中*/ printf("性别:"); scanf("%s",p1->sex); printf("数学成绩:"); scanf("%d",&p1->score[0]);/*将输入的数学成绩存放到p1所指结构体的数组score中*/ printf("物理成绩:"); scanf("%d",&p1->score[1]);/*将输入的物理成绩存放到p1所指结构体的数组score中*/ printf("英语成绩:"); scanf("%d",&p1->score[2]);/*将输入的英语成绩存放到p1所指结构体的数组score中*/ printf("C语言成绩:"); scanf("%d",&p1->score[3]);/*将输入的C语言成绩存放到p1所指结构体的数组score中*/ p1->total=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3];/*计算总分 */ p2=head;/*将头指针赋给p2*/ if(head==NULL) /*若没调用次函数以前的头指针head为空*/ {head=p1;p1->next=NULL;}/*则将p1赋给头指针head并将p1所指结构体成员指针next赋空值*/ else {while((p1->id>p2->id)&&(p2->next!=NULL)) {p3=p2;/*p3指向原p2指向的结点*/ p2=p2->next;}/*p2后移一个结点*/ if(p1->id<=p2->id) {if(head==p2){p1->next=head;head=p1;} /*插入到第一个结点之前*/ else {p3->next=p1;p1->next=p2;} /*插入到p3所指结点之后*/ } else{p2->next=p1;p1->next=NULL;} /*插入到尾结点之后*/ } n++;/*将学生人数加1*/ return(head); } struct student *delete (struct student *head,long int num)/*定义一个指向struct student的结构体指针函数*delete()用来删除考生信息.*/ {struct student *p1,*p2; /*定义两个指向struct student的结构体指针*/ printf("要删除的学生准考证号为:%ld\n",num); if(head==NULL)/*若调用次函数以前的头指针head为空*/ {printf("这是一个空表,没有可删除的学生准考证号!\n");return(head);} else{p1=head;/*否则将头指针赋给p1*/ while(num!=p1->id&&p1->next!=NULL)/*寻找要删除的结点当p1所指的学生准考证号不是输入的学生准考证号并且p1所指的next指针不为空*/ {p2=p1;p1=p1->next;}/*p2指向原p1指向的结点p1后移一个结点*/ if(num==p1->id)/*如果输入的学生准考证号是p1所指的学生准考证号*//*结点找到后删除*/ {if(p1==head) head=p1->next;/*如果head指针和p1指针相等则将下一个结点赋给指针head*/ else p2->next=p1->next;/*否则将p1所指结点赋给p2所指结点将要删除的学生信息跳过去*/ printf("删除准考证号为%ld的学生\n",num); n--;}/*将学生人数减1*/ else printf("没找到准考证号为%ld的学生!\n",num); /*结点没找到*/ return(head);/*将头指针返回*/ } } struct student *find(struct student *head,long int num) /*定义一个指向struct student的结构体指针函数*find()用来查找考生信息.*/ {struct student *p1; /*定义一个指向struct student的结构体指针*/ printf("要查找的学生准考证号为:%ld\n",num); if(head==NULL)/*若调用次函数以前的头指针head为空*/ {printf("这是一个空表,没有要查找的学生准考证号!\n");return(head);} else{p1=head;/*否则将头指针赋给p1*/ while(num!=p1->id&&p1->next!=NULL)/*寻找结点当p1所指的学生准考证号不是输入的学生准考证号并且p1所指的next指针不为空*/ {p1=p1->next;}/*p2指向原p1指向的结点p1后移一个结点*/ if(num==p1->id)/*如果要查找的学生准考证号是p1所指的学生准考证号*/ { printf("------------------------------------------------------------------------------\n");/*71个“-”*/ printf("准考证号 姓 名 性别 数学 物理 英语 C语言 平均分 总分 名次\n"); printf("------------------------------------------------------------------------------\n");/*71个“-”*/ printf("%8ld %6s %4s %2d %2d %2d %2d %-.2f %3d %-2d\n",p1->id,p1->name,p1->sex,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->total/4.0,p1->total,p1->m_c); printf("------------------------------------------------------------------------------\n"); } else printf("没找到准考证号为%ld的学生!\n",num); /*结点没找到*/ return(head); } } paixu(struct student *head) /*定义paixu()函数将考生的总分从大到小排列并输出*/ {int i,k,m,j; struct student *p1,*p2,*p[Q];/*定义一个指向struct student的结构体指针数组p*/ m=count(head); if(head==NULL)/*如果头指针是空则继续*/ {printf("这是一个空表,请先输入考生成绩!\n");} else {printf("------------------------------------------------------------------------------\n");/*78个“-”*/ printf(" *学生考试成绩统计表*\n"); printf("------------------------------------------------------------------------------\n");/*78个“-”*/ printf("准考证号 姓 名 性别 数学 物理 英语 C语言 平均分 总分 名次\n"); printf("------------------------------------------------------------------------------\n");/*78个“-”*/ p1=head; for(k=0;k<m;k++) {p[k]=p1;p1=p1->next;} for(k=0;k<m-1;k++) /*选择排序法*/ for(j=k+1;j<m;j++) if(p[k]->total<p[j]->total) {p2=p[k];p[k]=p[j];p[j]=p2;} /*从大到小排列的指针*/ } for(i=0;i<m;i++) {printf("%8ld %6s %4s %2d %2d %2d %2d %-.2f %3d %-2d\n",p[i]->id,p[i]->name,p[i]->sex,p[i]->score[0],p[i]->score[1],p[i]->score[2],p[i]->score[3],p[i]->total/4.0,p[i]->total,i+1); printf("------------------------------------------------------------------------------\n");/*78个“-”*/ p[i]->m_c=i+1; } } dkarg(struct student *head) {struct student *p1; int k,m; float arg1=0,arg2=0,arg3=0,arg4=0; m=count(head); p1=head; for(k=0;k<m;k++) {arg1+=p1->score[0]; arg2+=p1->score[1]; arg3+=p1->score[2]; arg4+=p1->score[3]; p1=p1->next;} arg1/=m;arg2/=m;arg3/=m;arg4/=m; printf(" *全班单科成绩平均分*\n"); printf("------------------------------------------------------------------------------\n");/*71个“-”*/ printf("数学平均分:%.2f 物理平均分:%.2f 英语平均分:%.2f C语言平均分:%.2f \n",arg1,arg2,arg3,arg4); printf("------------------------------------------------------------------------------\n");/*71个“-”*/ } void main() {int k; struct student *head; long i; printf("************************\n"); printf("|学生成绩系统主菜单界面|\n"); printf("| 1.输入学生成绩 |\n"); printf("| 2.显示学生成绩 |\n"); printf("| 3.修改学生成绩 |\n"); printf("| 4.删除学生成绩 |\n"); printf("| 5.排序学生成绩 |\n"); printf("| 6.查找学生成绩 |\n"); printf("| 7.安全退出系统 |\n"); printf("| ->学生成绩管理程序<- |\n"); printf("************************\n"); head=creat(); do{printf("************************\n"); printf("|学生成绩系统主菜单界面|\n"); printf("| 1.输入学生成绩 |\n"); printf("| 2.显示学生成绩 |\n"); printf("| 3.修改学生成绩 |\n"); printf("| 4.删除学生成绩 |\n"); printf("| 5.排序学生成绩 |\n"); printf("| 6.查找学生成绩 |\n"); printf("| 7.安全退出系统 |\n"); printf("| ->学生成绩管理程序<- |\n"); printf("************************\n"); printf("请输入选择号(1--7):"); scanf("%d",&k); switch(k) { case 1:head=creat();break; case 2:output(head);printf("参加考试的学生人数为:%d人\n",count(head));printf("请按任意键显示主菜单!\n");getch();break; case 3:head=insert(head);output(head);printf("请按任意键显示主菜单!\n");getch(); break; case 4:printf("请输入要删除的准考证号(8位):");scanf("%ld",&i);head=delete(head,i);output(head);printf("请按任意键显示主菜单!\n");getch(); break; case 5:paixu(head);dkarg(head);printf("参加考试的学生人数为:%d人\n",count(head));printf("请按任意键显示主菜单!\n");getch();break; case 6:printf("请输入要查找的准考证号(8位):");scanf("%ld",&i);head=find(head,i);printf("请按任意键显示主菜单!\n");getch();break; default:break; } }while(k!=7);

} 但是要求用文件存储输入信息,请各为高手帮帮忙!谢谢!急用!

搜索更多相关主题的帖子: 系统 学生 管理 
2005-09-10 01:37
爱无限
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2006-2-17
收藏
得分:0 

爱在写代码
2006-02-26 15:44
tianykun
Rank: 4
等 级:禁止访问
威 望:11
帖 子:3727
专家分:0
注 册:2005-11-13
收藏
得分:0 
。C写的。难看啊

离开这里,离开你的视野,归隐到属于我的地方,无论何处
2006-03-02 09:21
RL720
Rank: 1
等 级:新手上路
帖 子:148
专家分:0
注 册:2005-11-6
收藏
得分:0 
程序没看 你是要问文件的读写是吧~
要含有头文件fstream

如果要从abc.txt中读取
ifstream fin("abc.txt");
要存入xyz.txt文件中
ofstream fout("xyz.txt");
如果不加参数就是默认模式。。。。就是文件中原有的数据会被替换

fin fout就和cin cout用法一样拉`


2006-03-05 20:20
wzzhi
Rank: 1
等 级:新手上路
帖 子:123
专家分:0
注 册:2005-11-11
收藏
得分:0 


厉害

2006-03-06 19:40
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
四楼说出的是C++语法来的,如果用C就是用fopen打开文件,用fclose()关闭文件
如果读文件就可以用sscanf()来读,写可以用sprinrf来写。

c++/C + 汇编 = 天下无敌
2006-03-07 11:02
忧伤的飞鸟
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2006-4-11
收藏
得分:0 
,不明白.有点晕.

天天想钱,天天想赚到钱,但现在都还没钱~~
2006-04-28 23:48
激情依旧
Rank: 1
等 级:新手上路
威 望:2
帖 子:524
专家分:0
注 册:2005-4-4
收藏
得分:0 
我也晕了。....字体好大......有空慢慢研究

生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧
2006-04-29 10:45
coolg
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-5-21
收藏
得分:0 
我更晕,,,,不好意思的我学烂的啊

2006-05-28 20:46
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
以下是引用coolg在2006-5-28 20:46:00的发言:
我更晕,,,,不好意思的我学烂的啊

漫漫学,只要努力,一定会学好的
这个帖子的确看的有点头晕,看看我能不能编辑一下
你可以去看看其他的学生管理系统贴子啊,置顶的经典帖子集合里面收录了至少5个这样的程序。

PS:Saber的头像不错


我的征途是星辰大海
2006-05-28 21:31
快速回复:学生成绩管理系统
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030135 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved