| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 371 人关注过本帖
标题:求高手解答,c语言问题!!!
取消只看楼主 加入收藏
mdzjd92
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-6-29
结帖率:100%
收藏
 问题点数:0 回复次数:0 
求高手解答,c语言问题!!!
做了一个程序,缺少保存信息和读取信息以及修改信息,求高手添加,本人不会,急求!!!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#define LEN sizeof(Student)
#define NULL 0
typedef struct student
{int num; /*学号*/
char name[20]; /*姓名*/
char sex[2]; /*性别*/
int score[5]; /*成绩*/
int sum; /*总成绩*/
struct student *next;
}Student;
int n; /*声明一个全局变量*/               
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("%s",p1->sex);
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]);
printf("请输入第%d名学生的体育成绩:",n); /*输入体育成绩*/
scanf("%d",&p1->score[4]);
p1->sum=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3]+p1->score[4];
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     1.按学生学号排序      \t \n");
printf("\t\t     2.按学生总分排序      \t \n");
printf("\t\t     3.单科高分及均分      \t \n");
printf("\t\t     4.显示当前学生成绩    \t \n");
printf("\t\t     0.返回上一级菜单      \t \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;
case 7:if (pm->score[4]<p2->score[4]) 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,max_5,min_1,min_2,min_3,min_4,min_5;
int max_sum,min_sum;
int sum_1=0,sum_2=0,sum_3=0,sum_4=0,sum_5=0;
float aver_1,aver_2,aver_3,aver_4,aver_5,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_4=min_4=p->score[3];
max_5=min_5=p->score[4];
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_5<p->score[4]) max_5=p->score[4];
else if (min_5>p->score[4]) min_5=p->score[4];
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];
sum_5+=p->score[4];}
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_5=1.0*sum_5/n;
aver_sum=aver_1+aver_2+aver_3+aver_4+aver_5;
printf("总共%d名学生,具体数据为:\n",n);  
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    性别\t  高数成绩    线代成绩    英语成绩    大物成绩     体育成绩    总分    平均分\n");/*输出所有的学生信息*/
 printf("%d\t%s\t%s\t        %d         %d        %d        %d       %d       %d        %d        %.2f\n",p->num,
p->name,p->sex ,p->score[0],p->score[1],p->score[2],p->score[3],p->score[4],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性别\t      高数成绩      线代成绩       英语成绩     大物成绩     体育成绩      总分      平均分\n");
 printf("%d\t%s\t%s\t        %d        %d         %d         %d        %d         %d       %d      %.2f\n",
 p->num,p->name,p->sex ,p->score[0],p->score[1],p->score[2],p->score[3],p->score[4],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("请输入新加入学生的性别:"); /*输入性别*/
scanf("%s",p->sex);
 printf("请输入新加入学生的高数成绩:",n); /*输入高数成绩*/
 scanf("%d",&p->score[0]);
printf("请输入新加入学生的线代成绩:",n); /*输入线性代数成绩*/
scanf("%d",&p->score[1]);
printf("请输入新加入学生的英语成绩:",n); /*输入英语成绩*/
     scanf("%d",&p->score[2]);
printf("请输入新加入学生的大物成绩:",n);  /*输入大学物理成绩*/
scanf("%d",&p->score[3]);
printf("请输入新加入学生的体育成绩:",n);  /*输入体育成绩*/
scanf("%d",&p->score[4]);
  p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3]+p->score[4];
     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性别\t  高数成绩  线代成绩 英语成绩 大物成绩 体育成绩  总分 平均分\n");
for(;p;p=p->next)
printf("%d\t%s\t%s\t      %d      %d      %d      %d      %d      %d    %.2f\n",
 p->num,p->name,p->sex ,p->score[0],p->score[1],p->score[2],p->score[3],p->score[4],p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3]+p->score[4]);}
struct student *del(struct student *head,long num) /*定义删除学生信息函数*/
{struct student *p1,*p2;
if(head==NULL) {printf("\nlist null! \n");return head;}
p1=head;
while(num!=p1->num && p1->next!=NULL)
{p2=p1;p1=p1->next;}
if(num==p1->num)
{if(p1==head)head=p1->next;
else p2->next=p1->next;
printf("delete:%ld\n",num);
n=n-1;}
else printf("%ld not deen found! \n",num);
return(head);}
int main()/*主函数即用户的操作界面*/
{Student *head;
int choose,i,num; /*声明局部变量*/
head=(Student *)malloc(LEN);
head->next=NULL;   
for(;;)
{printf("\n\t\t           学生管理系统          \n"); /*学生管理系统*/
printf("\t\t          1.学生数据录入\t  \n"); /*.学生数据键盘录入*/
printf("\t\t          2.学生数据排序\t   \n"); /*学生数据统计排序*/
printf("\t\t          3.查询学生数据\t\t   \n"); /*.查询学生数据*/
printf("\t\t          4.增加学生数据\t\t   \n"); /*增加学生数据*/
printf("\t\t          5.显示当前成绩\t   \n"); /*显示当前成绩表*/
printf("\t\t          6.删除学生数据\t\t   \n"); /*删除学生数据*/
printf("\t\t          7.保存学生信息\t\t    \n"); /*保存学生信息*/
printf("\t\t          8.读取学生信息\t\t     \n");/*读取学生信息*/
printf("\t\t          0.退出成绩管理系统\t \n"); /*退出成绩管理系统*/
printf("\n请输入你要执行的操作:"); /*请输入你要执行的操作*/
scanf("%d",&choose);
while(getchar()!='\n');
switch(choose)
{case 1:printf("\n                            注意! ! !                  ");
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 6:printf("请输入要删除的学生学号:");
scanf("%d",&num);
del(head,num); /*调用删除函数*/
case 0:system("pause");return 0; /*退出系统*/
default: printf("\n\n你的输入有误!请重新输入:\n\n");break; }}}
搜索更多相关主题的帖子: 信息 head include 总成绩 
2012-07-05 09:52
快速回复:求高手解答,c语言问题!!!
数据加载中...
 
   



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

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