c语言程序

来源:百度文库 编辑:神马文学网 时间:2024/04/28 07:40:14
 编写一个菜单驱动的学生成绩管理程序。要求如下:

1.能输入并显示n个学生的m门考试科目的成绩、总分和平均分。

2.按总分由高到低进行排序。

3.任意输入一个学号,能显示该学生的姓名、各门功课的成绩     从键盘输入若干个(不多于20个)学生的学号、姓名成绩,编程实现:1查找成绩最高和最低学生的学号、姓名、成绩并打印。2计算所以同学的总平均成绩。3对学生信息按成绩从高到低进行排序。【1】#include
typedef struct stu{
    char no[20];  /*学号*/
    char name[15]; /*姓名*/
    int grade;    /*成绩*/
}stu_inf;
void sort(stu_inf a[],int n)
{
int i, j, k;
stu_inf t;   /*插入排序算法*/
for (i=1; i{
  t = a[i]; /*暂存下标为i的数。下标从1开始*/
  for (j=i-1; j>=0 && t.grade > a[j].grade ; j--) /*在它前面有序列中找插入位置。*/
   a[j+1] = a[j];  /*如果满足条件就往后挪*/
  a[j+1] = t; /*找到下标为i的数的放置位置*/
 }
}
void main(void)
{
    stu_inf a[20];  /*学生信息的结构数组*/
    int i , n , ave = 0; /*ave保存总成绩*/
printf("请输入学生的数量:");
    scanf("%d",&n);
    for( i = 0 ; i < n ; i++)
    {
        printf("请依次输入学生的学号、姓名、成绩:");
        scanf("%s%s%d",a[i].no,a[i].name,&a[i].grade);
    }
    sort(a,n);   /*对数组进行排序*/
    printf("成绩最好的学生为%s,学号为%s,成绩为%d\n",a[0].name,a[0].no,a[0].grade);
    printf("成绩最差的学生为%s,学号为%s,成绩为%d\n",a[n-1].name,a[n-1].no,a[n-1].grade);
    printf("以下为所有学生的信息\n学号\t姓名\t成绩\n");
    for( i = 0 ; i < n ; i++)
{
        printf("%s\t%s\t%d\n",a[i].no,a[i].name,a[i].grade);
  ave += a[i].grade;
}
printf("平均成绩为%.2f\n", (float)(ave +0.0)/n);  /*除法运算加0.0为小数除法*/
} 【2】#include
#include

#define ARR_SiZE 20

struct Student{
char num[10];
char name[15];
float score;
};
void InsertSort(struct Student* pstu,int n);
int main()
{
int i,n,max,min;
float sum,ave;
struct Student stu[ARR_SiZE];
printf("请输入学生数目 :");
scanf("%d",&n);

printf("请依次输入 %d 个学生的学号姓名和分数:\n",n);
max=min=0;
sum=0;
for (i=0;i{
  scanf("%s%s%f",&stu[i].num,&stu[i].name,&stu[i].score);
  sum=sum+stu[i].score;
  if (stu[i].score  {
   min=i;
  }
  else if (stu[i].score>stu[max].score)
  {
   max=i;
  }
}
ave=sum/n;
printf("成绩最高的学生的信息:\n");
printf("%s\t%s\t%f\n",stu[max].num,stu[max].name,stu[max].score);
printf("成绩最低的学生的信息:\n");
printf("%s\t%s\t%f\n",stu[min].num,stu[min].name,stu[min].score);
printf("所有同学的总平均成绩为:\t%f\t\n",ave);

InsertSort(stu,n);
printf("学生信息按成绩从高到低为:\n");
for (i=0;i{
  printf("%s\t%s\t%f\n",stu[i].num,stu[i].name,stu[i].score);
}
return 0;
}
void InsertSort(struct Student* pstu,int n)
{
int i,j;
struct Student temp;
for (i=1;i{
  j=i-1;
  temp=pstu[i];
  while (j>=0&&pstu[j].score  {
   pstu[j+1]=pstu[j];
   --j;
  }
  pstu[j+1]=temp;
}
} 【3】#include
#include

struct Student {
char name[20];
int serial;
int scores[5];
};
main()
{
char ch,temp;
FILE *fpstu;
struct Student stu;
int i,sum=0;
float average;
printf("是否进行成绩录入(Y/N):");
ch=getchar();
temp=getchar();
if((fpstu=fopen("students.txt","a+"))==NULL)
  {
   printf("file open students.txt failed!\n");
   system("pause");
   exit(0);
  }
if(ch=='Y' || ch=='y')
{
   printf("姓名:");
   scanf("%s",stu.name);
   printf("学号:");
   scanf("%d",&stu.serial);
   for(i=0;i<5;i++)
   {
    printf("课程%d分数:",i+1);
    scanf("%d",&stu.scores[i]);
   }
   printf("输入完毕!\n");
   if(fwrite(&stu,sizeof(struct Student),1,fpstu)!=1)
   {
    printf("存盘失败!\n");
    system("pause");
    exit(0);
   }
   else
    printf("存盘完毕!\n");
}
rewind(fpstu);
printf("姓名\t学号\t课程1\t课程2\t课程3\t课程4\t课程5\t总分\t平均\n");
while(!feof(fpstu))
{
  if(fread(&stu,sizeof(struct Student),1,fpstu)!=1)
  {
   printf("读取完毕!\n");
   system("pause");
   exit(0);
  }
  printf("%s\t%d\t",stu.name,stu.serial);
  sum = 0;
  for (i = 0; i < 5; i++)
  {
   if(stu.scores[i] >= 90)
    temp = 'A';
   else if(stu.scores[i] >= 80)
    temp = 'B';
   else if(stu.scores[i] >= 70)
    temp = 'C';
   else if(stu.scores[i] >= 60)
    temp = 'D';
   else
    temp = 'E';
   printf("%c\t",temp);
   sum += stu.scores[i];
  }
  average = (float)sum / 5;
  printf("%d\t%f\n",sum,average);
}
} 【4】

#include
#include
#include
#include

#define STU_NUM   40       /* 最多的学生人数 */
#define COURSE_NUM 10     /* 最多的考试科目 */

struct student
{
int   number;      /* 每个学生的学号 */
char name[10];              /* 每个学生的姓名 */
int   score[COURSE_NUM];   /* 每个学生M门功课的成绩 */
int   sum;                   /* 每个学生的总成绩 */
float average;               /* 每个学生的平均成绩 */
};
typedef struct student STU;

/* 函数功能: 向链表的末尾添加从键盘输入学生的学号、姓名和成绩等信息
函数参数: 结构体指针head,指向存储学生信息的结构体数组的首地址
     整型变量n,表示学生人数
     整型变量m,表示考试科目
函数返回值: 无
*/
void AppendScore(STU *head, int n, int m)
{
int   j;
STU   *p;

for (p=head; p{
   printf("\nInput number:");
   scanf("%d", &p->number);
   printf("Input name:");
   scanf("%s", p->name);  
   for (j=0; j   {
    printf("Input score%d:", j+1);
    scanf("%d", p->score+j);
   }
}
}

/* 函数功能: 打印n个学生的学号、姓名和成绩等信息
函数参数: 结构体指针head,指向存储学生信息的结构体数组的首地址
     整型变量n,表示学生人数
     整型变量m,表示考试科目
函数返回值: 无
*/
void PrintScore(STU *head, int n, int m)
{
STU *p;
int i;
char str[100] = {'\0'}, temp[3];

strcat(str, "Number     Name ");
for (i=1; i<=m; i++)
{
   strcat(str, "Score");
   itoa(i,temp, 10);
   strcat(str, temp);
   strcat(str, " ");
}
strcat(str,"     sum average");

printf("%s", str);              /* 打印表头 */
for (p=head; p{
   printf("\nNo.%3d%8s", p->number, p->name);  
   for (i=0; i   {
    printf("%7d", p->score[i]);
   }
   printf("%11d%9.2f\n", p->sum, p->average);
}
}

/* 函数功能: 计算每个学生的m门功课的总成绩和平均成绩
函数参数: 结构体指针head,指向存储学生信息的结构体数组的首地址
     整型变量n,表示学生人数
     整型变量m,表示考试科目
函数返回值: 无
*/
void TotalScore(STU *head, int n, int m)
{
STU   *p;
int   i;

for (p=head; p{
   p->sum = 0;
   for (i=0; i   {
    p->sum = p->sum + p->score[i];
   }  
   p->average = (float)p->sum / m;
}
}

/* 函数功能: 用选择法按总成绩由高到低排序
函数参数: 结构体指针head,指向存储学生信息的结构体数组的首地址
     整型变量n,表示学生人数
函数返回值: 无
*/
void SortScore(STU *head, int n)
{
int i, j, k;
STU temp;

for (i=0; i{
   k = i;
   for (j=i; j   {
    if ((head+j)->sum > (head+k)->sum)
    {
     k = j;
    }
   }
   if (k != i)
   {
    temp = *(head+k);
    *(head+k) = *(head+i);
    *(head+i) = temp;
   }
   }
}

/* 函数功能: 查找学生的学号
函数参数: 结构体指针head,指向存储学生信息的结构体数组的首地址
     整型变量num,表示要查找的学号
     整型变量n,表示学生人数
函数返回值: 如果找到学号,则返回它在结构体数组中的位置,否则返回-1
*/
int SearchNum(STU *head, int num, int n)
{
int i;

for (i=0; i{
   if ((head+i)->number == num) return i;
}
return -1;
}

/* 函数功能: 按学号查找学生成绩并显示查找结果
函数参数: 结构体指针head,指向存储学生信息的结构体数组的首地址
     整型变量n,表示学生人数
     整型变量m,表示考试科目
函数返回值: 无
*/
void SearchScore(STU *head, int n, int m)
{
int number, findNo;

printf("Please Input the number you want to search:");
scanf("%d", &number);
findNo = SearchNum(head, number, n);
if (findNo == -1)
{
   printf("\nNot found!\n");
}
else
{
   PrintScore(head+findNo, 1, m);
}
}

/* 函数功能: 显示菜单并获得用户键盘输入的选项
函数参数: 无
函数返回值: 用户输入的选项
*/
char Menu(void)
{
char ch;

printf("\nManagement for Students' scores\n");
printf(" 1.Append record\n");
printf(" 2.List    record\n");
printf(" 3.Search record\n");
printf(" 4.Sort    record\n");
printf(" 0.Exit\n");
printf("Please Input your choice:");
scanf(" %c", &ch); /*在%c前面加一个空格,将存于缓冲区中的回车符读入*/
return ch;
}

main()                               
{
char ch;
int   m, n;
STU    stu[STU_NUM];

printf("Input student number and course number(n<40,m<10):");
scanf("%d,%d", &n, &m);
while (1)
{
   ch = Menu();         /* 显示菜单,并读取用户输入 */
   switch (ch)
   {
    case'1':AppendScore(stu, n, m);/* 调用成绩添加模块 */
          TotalScore(stu, n, m);
       break;
    case'2':PrintScore(stu, n, m); /* 调用成绩显示模块 */
       break;
    case'3':SearchScore(stu, n, m);/* 调用按学号查找模块 */
       break;
    case'4':SortScore(stu, n);      /* 调用成绩排序模块 */
       printf("\nSorted result\n");
       PrintScore(stu, n, m); /* 显示成绩排序结果 */
       break;   
    case'0':exit(0);                  /* 退出程序 */
       printf("End of program!");
          break;
    default:printf("Input error!");
       break;
   }  
}
}【5】

C语言课程设计——学生成绩管理系统

(2009-02-25 20:08:10)转载 标签:

it

                 

摘   

 

 学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生成绩管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对学生信息及成绩进行管理,具有手工管理所无法比拟的优点.

 

Student result management the system is the part of education unit indispensability, its contents says all to the pass importance for the decision maker of school and the governor, so student the result manage the system should be able to provide ample information and fast search means for customer.But always people use the way management of traditional artificial document file, this management way exists much weakness.Along with science technique of continuously raise, calculator science is gradual maturity, it the strong function have already profoundly known for people, it has already got into mankind's each realm of society to erupt to flick a more and more important function.As a part of the calculator application, usage the calculator carry on a management to student's information and the result and have the handicraft management cans not compare to of advantage.

一.课程设计目的

 

1、熟练掌握C语言课程中所学的理论知识;

     C语言是在国内外广泛使用的一种计算机语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛。学习使用C语言程序的目的是掌握程序设计的思路,学会用计算机语言编写程序正确处理算法和语法的关系算法是程序的核心、是灵魂,语法是外壳、是工具。通过课程设计,我们要熟练的掌握C语言的算法、语言、函数的调用、循环的使用、数组的运用等。

 

2、通过综合C语言的基本知识来解决实际问题;

     C语言中与许多的东西,像:数据类型、运算符、表达式、程序设计结构、数组与函数调用。其中C语言最难和最经典的地方就是循环,(while和for的嵌套)运用WHILE,FOR,SWITCH和if的循环嵌套,我们可以实现现实中课程信息管理、图书信息管理、学生信息管理、商品信息管理等。C语言还具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。

 

3、加强分析和解决问题的能力。

通过这次的课程设计,能加强我们对程序设计的思考、设计、分析、理解和解决问题的能力。对于我们初学者来说,主要是学习成长设计的方法,进行程序设计的基本训练为将来进一步学习打下基础。课程设计不能之掌握概念,还要动手编程、上机调试运行。只有自己动手,才能学的更多。

二.课程设计题目描述和要求

 

1.题目:学生成绩管理系统. 在程序设计时将其逐步细化,每个模块由一个函数实现,整个程序通过函数调用联系。使用函数思想编写程序,程序中的每个模块都做成函数形式,由主函数调用子函数。在各个功能模块设计时根据其具体功能使用所学知识进行设计,例如:在需要循环输出时可以使用 for循环,需要条件控制时可以使用if语句,在排序时可以使用冒泡法等。

 

2.要求:设计包含N个学生的数据信息的学生成绩管理系统,包括以下信息:
学号 — num[10](字符串)、 姓名(拼音)— name[25](字符串)、
性别 — sex(字符,M或F)、 年龄 — age
三门课程成绩(高数、英语、计算机)— score [3](整型)。

 

三、课程设计报告内容、算法分析及调试

1.设计步骤

(1)、需求分析:对系统的应实现的功能进行分析。

(2)、概要设计:对系统功能进行模块分解,对模块的功能及模块之间的相互关系进行说明(如用到函数,则对函数间的接口进行说明),对系统使用的数据结构(各数组、主要变量的设置及其代表的含义)进行说明。

(3)、详细设计:用流程图、伪代码等方法对各主要算法进行描述。

(4)、编写代码:根据设计编写。源程序要按照程序的格式规范来编写,要求结构清晰,界面友好,关键部分有必要的注释。

(5)、调试分析:准备充分的测试数据对系统进行调试(对错误的数据输入也要进行测试,保证程序的容错性),并通过测试对系统提出改进设想。

 

 5.调试

经过我们这个小组一天的调试,我们终于把各自的模块整合起来了,在这过程中,我们遇到了很多问题,像数据不匹配,括号不配对,赋值重复等。因为C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等原因。但经过我们这小组共同的努力,终于完成了。首先,我们用DO  WHILE循环,使这个图书系统能无限使用,再次,我们用SWITCH对各个模块功能进行了组合,使学生成绩管理系统的功能更完善,界面更清晰、明了。

 

四.总结

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。

总的来说,本次课程设计,实在是受益匪浅。本来这门课的知识学的就不够扎实,当刚开始要设计的时候,还真不知道从哪里下手,结果第一天的上机,我只是做了一个下午,什么也没干!回去以后,我想,这样不行,这样下去还得了!后来我们这组的组长把整个程序的各个模块都分配好任务,我主要负责查找那一个模块的。第二天因为有了确实的任务,所以我就静下心来去编程,首先想到的是如何定义类型,想用数组的话很麻烦,我们也只学了这么多内容,后来组长说如果用结构体的话就比较方便,所以我们就决定自己在学一下结构体那方面的知识。我选用了顺序查找法编写了查找函数,并且通过编写使该程序可以进行多次查找,界面友好,并且输出的画面美观。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,例如编写的程序在计算机上识别的是没有错误的,但是运行的结果确实不对的,总是两个字符串一起输出,怎么看我的源程序都没有错误,后来经过老师的指导才知道字符串输出是以回车键识别结束语句的,解决的办法是在输出语句中间加一个输入字符语句;后来在我们团队的合作下,一一攻破了困难,最后把一个完整的程序设计完成,感觉特别有成就感的。虽然课程设计只有短短的几天,但是我发现我学到的知识比整整一个学期学到的都多。理论和实践的相结合是学习最有效的方法。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。

回顾起此次课程设计,至今我仍感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

 

六、附录的源程序及各模块说明

1、主函数

定义结构体,对要调用的函数进行声明。通过输出控制显示欢迎界面,通过函数getch(),putchar(‘*’)控制密码的输入输出,系统调用菜单函数密码登陆。

#include

#include

#include

#define N 100 

int M=0;

struct student 

 {char num[10];                                               

char name[25];                          

char sex;                             

int age;

float score[3];

}stu[N];

void main()  

{void system();

    void menu();void add();

void del();

void search();

void modify();

void sort();

int k,i;

char str[10];

    printf("*****************************************************************************\n");

printf("\n");
printf("\n");printf("  欢迎进入学生成绩管理系统! \n"); printf(" \n");printf("请输入密码继续!\n");printf(" \n");printf(" \n");for(k=0;;)

{printf("请输入六位数密码:");

for(i=0;(str[i]=getch())!='\r';i++)

putchar('*');

printf("\n");

str[i]='\0';

if(strcmp(str,"123456")!=0)

printf("密码错误!\n");                     

else break;                          

}

printf("登陆成功!");              

printf("\n\n\n");

system("cls");

menu();

}

          

2、 菜单函数

定义菜单函数,通过输出函数显示系统功能。利用switch语句实现多分支选择结构。

void menu()

{int c;printf("                     欢迎进入主菜单!                                        \n");

 printf("****************************************************************************\n");

printf("*                                                                          *\n");
printf("*                   1.学生信息的录入                                       *\n");printf("*                                                                          *\n");printf("*                   2.学生信息的删除                                       *\n");printf("*                                                                          *\n");printf("*                   3.学生信息的查找                                       *\n"); printf("*                                                                          *\n");printf("*                   4.学生信息的修改                                       *\n");printf("*                                                                          *\n");printf("*                   5.学生排名的情况                                       *\n");printf("*                                                                          *\n");printf("*                   6.退出系统                                             *\n");printf("*                                                                          *\n");printf("****************************************************************************\n");

printf("请选择操作:");     

    scanf("%d",&c);

if(c<1 || c>6)c=0;

switch(c)

{case 0:printf("输入错误!\n");break;

case 1: add();break;

case 2: del();break;

case 3: search();break;

case 4: modify();break;

case 5: sort();break;

case 6: break;

 

}}

3、 录入函数

多次使用输入输出函数输入信息,通过标记flag控制多次输入。

    void add()

    { void system();

   int i=0,flag=1;char k;

system("cls");printf("                     欢迎进入学生信息的录入!                                     \n");

    while(flag)

    { i++;

printf("请输入第%d个学生的学号:",i);

scanf("%s",stu[i-1].num);

printf("请输入第%d个学生的姓名:",i);

scanf("%s",stu[i-1].name);

printf("请输入第%d个学生的性别:",i);getchar();

scanf("%c",&stu[i-1].sex);

printf("请输入第%d个学生的年龄:",i);

scanf("%d",&stu[i-1].age);

printf("输入第%d个学生的数学成绩:",i);

scanf("%f",&stu[i-1].score[0]);

printf("输入第%d个学生的英语成绩:",i);

scanf("%f",&stu[i-1].score[1]);

printf("输入第%d个学生的计算机成绩:",i);

scanf("%f",&stu[i-1].score[2]);

M++;printf("\n\n");

printf("序号: %d\n",i);

printf("学号:%s\n",stu[i-1].num);

printf("姓名:%s\n",stu[i-1].name);

printf("性别:%c\n",stu[i-1].sex);

printf("数学:%.2f\n",stu[i-1].score[0]);

printf("英语:%.2f\n",stu[i-1].score[1]);

printf("计算机:%.2f\n",stu[i-1].score[2]); printf("\n\n");

printf("继续或退出(y/n):");getchar();scanf("%c",&k);

if(k=='n' || k=='N')

flag=0;}

system("cls");

menu();   

}

4、 删除函数

输入学号,通过学号找到对应的学生,从删除项起后面对应的信息前移。同时,用标记flag控制多次删除。                  

void del()                                      

{void system();                            

 int i,j,flag=1;                                    

char c;                             

system("cls");                         

printf("欢迎进入学生信息的删除成功。                            \n");                                 

while(flag)                               

{printf("请输入要删除的学号:");                                       

          scanf("%s",str);    

for(i=0;i             

if(strcmp(str,stu[i].num)     

==0)                     

        {for(j=i;j

         stu[j]=stu[j+1]; 

 printf("删除成功!\n");

        M--;  break; }

         if(i==N)

        printf("无此学号!\n");

        printf("继续或退出(y/n):");

       getchar();

       scanf("%c",&c);

if(c=='n' || c=='N')flag=0;

}

system("cls");

menu();  

}

5查找函数

 

                                                                                                                                                                                                                                                                                                                                                 flag=0                                       

void search()                   

 

char str[10];                                        

{void system();                       

int i,flag=1;

char m;

system("cls");

printf("  欢迎进入学生信息的查找!                                     \n");

 while(flag)

 { printf("请输入要查找的学号:");

 scanf("%s",str);

 for(i=0;i

if (strcmp(str,stu[i].num)==0)

      { printf("学号   姓名    性别     年龄    高数     英语     计算机\n");

     printf("%-7s%-10s%2c%7d%10.1f%10.1f%10.1f\n",  

     stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].score[0],

     stu[i].score[1],stu[i].score[2]);

      break;  

      }

      if(i==N)printf("无此学号!\n");

      printf("继续或退出(Y/N)?"); 

      getchar();

      scanf("%c",&m);

     if (m=='n'||m=='N')

        flag=0;} 

system("cls");

  menu(); 

}

算法:通过顺序查找法,从N=0到N-1循环顺序查找输入的学号,再通过字符串比较函数找到学号的位置i,并通过结构体数组输出学生i一系列的信息;通过标记flag=1进入外层循环,控制多次查找信息。

6、 修改函数

输入要修改的学号,通过学号找到对应的学生,再修改其信息,同样,还是利用标记flag控制多次修改。

void modify()

{void system();

    char str[10];

  int i,j,flag=1;

  char k;

  system("cls");

printf("                     欢迎进入学生信息的修改!                                     \n");

 while(flag)

  {printf("请输入要修改的学号:");

    scanf("%s",str);

   for(i=0;i

   if (strcmp(str,stu[i].num)==0)

   printf("ok!\n");

        printf("输出修改前的信息:\n");

    printf("学号   姓名    性别    年龄     高数      英语      计算机\n");

    printf("%-6s%-10s%3c%7d%11.1f%11.1f%11.1f\n",

     stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].score[0],

     stu[i].score[1],stu[i].score[2]);

     printf("\n输入修改的分数:\n");

     printf("高数 英语 计算机:"); 

     for(j=0;j<3;j++)

     scanf("%f",&stu[i].score[j]);

    printf("输出修改后的信息:\n");

    printf("学号   姓名    性别     年龄      高数      英语      计算机\n");

    printf("%-6s%-10s%3c%7d%11.1f%11.1f%11.1f\n",

     stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].score[0],

     stu[i].score[1],stu[i].score[2]);

    break;

   }

   if(i==N)

 printf("无此学号!\n");

 printf ("继续或退出(Y/N)?");  

 getchar();

 scanf("%c",&k);

 

 if(k=='n'||k=='N')flag=0;

}

system("cls");

menu();  

}

7、 排序函数

定义结构体变量作为空瓶子,在利用简单选择排序法以后,用k标记每一躺的最大值的位置,在交换信息。利用flag控制返回主菜单。

void sort()                                   

 {void system();                   

     struct student t;                 

    float sum[N];                      

float aver[N];                   

float f,g;                              

char c;                                

int i,j,k,p,x,flag=1;                            

system("cls");                                                                                                                                    

printf("欢迎进入学生信息的排序!\n");              

while(flag)                   

 {for(i=0;i          

sum[i]=0;                     

for(i=0;i                                  

for(j=0;j<3;j++)                                     

{sum[i]=sum[i]+                               

stu[i].score[j];  

aver[i]=sum[i]/3; }

      for(k=0;k{x=k;for(p=k+1;pif(sum[x]

               x=p;                

         g=sum[k];sum[k]=sum[x];sum[x]=g;

        t=stu[k];stu[k]=stu[x];stu[x]=t;     

         f=aver[k];aver[k]=aver[x];aver[x]=f;}

    printf("学号   姓名    性别     年龄    高数     英语     计算机    总分     平均分\n");

      for(i=0;i

    printf("%-7s%-10s%2c%7d%10.1f%10.1f%10.1f%9.1f%9.1f\n",  

     stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].score[0],

     stu[i].score[1],stu[i].score[2],sum[i],aver[i]);

   printf("是否返回主菜单(y/n):");

  getchar(); scanf("%c",&c);

 if(c=='y'||c=='Y')    flag=0; }

system("cls");

  menu();  C、传统 C++
#include //设定插入点
#include //字符处理
#include //定义错误码
#include //浮点数处理
#include //文件输入/输出
#include //参数化输入/输出
#include //数据流输入/输出
#include //定义各种数据类型最值常量
#include //定义本地化函数
#include //定义数学函数
#include //定义输入/输出函数
#include //定义杂项函数及内存分配函数
#include //字符串处理
#include //基于数组的输入/输出
#include //定义关于时间的函数
#include //宽字符处理及输入/输出
#include //宽字符分类

/******************************/

标准 C++ (同上的不再注释)
#include //STL 通用算法
#include //STL 位集容器
#include
#include
#include
#include
#include //复数类
#include
#include
#include
#include
#include //STL 双端队列容器
#include //异常处理类
#include
#include //STL 定义运算函数(代替运算符)
#include
#include //STL 线性列表容器
#include //STL 映射容器
#include
#include //基本输入/输出支持
#include //输入/输出系统使用的前置声明
#include
#include //基本输入流
#include //基本输出流
#include //STL 队列容器
#include //STL 集合容器
#include //基于字符串的流
#include //STL 堆栈容器
#include //标准异常类
#include //底层输入/输出支持
#include //字符串类
#include //STL 通用模板类
#include //STL 动态数组容器
#include
#include
using namespace std;

/******************************/
C99 增加

#include //复数处理
#include //浮点环境
#include //整数格式转换
#include //布尔环境
#include //整型环境
#include //通用类型数学宏
/******************************/
如果有什么疑问,可以通过搜索引擎找找再问,毕竟那样可能会有很好的答案.
/******************************/ 【6】#include /*引用库函数*/
#include
#include
#include typedef struct /*定义结构体数组*/
{
 char num[10]; /*学号*/
 char name[20]; /*姓名*/
 int score; /*成绩*/
}Student; Student stu[80]; /*结构体数组变量*/ int menu_select() /*菜单函数*/
{
 char c;
 do{
  system("cls"); /*运行前清屏*/
  printf("\t\t****Students' Grade Management System****\n"); /*菜单选择*/
  printf("\t\t | 1. Input Records |\n");
  printf("\t\t | 2. Display All Records |\n");
  printf("\t\t | 3. Sort |\n");
  printf("\t\t | 4. Insert a Record |\n");
  printf("\t\t | 5. Delete a Record |\n");
  printf("\t\t | 6. Query |\n");
  printf("\t\t | 7. Statistic |\n");
  printf("\t\t | 8. Add Records from a Text File|\n");
  printf("\t\t | 9. Write to a Text file |\n");
  printf("\t\t | 0. Quit |\n");
  printf("\t\t*****************************************\n");
  printf("\t\t\tGive your Choice(0-9):");
  c=getchar(); /*读入选择*/
 }while(c<'0'||c>'9');
 return(c-'0'); /*返回选择*/
} int Input(Student stud[],int n) /*输入若干条记录*/
{
 int i=0;
 char sign,x[10]; /*x[10]为清除多余的数据所用*/
 while(sign!='n'&&sign!='N') /*判断*/
 {
  printf("\t\t\tstudent's num:"); /*交互输入*/
  scanf("\t\t\t%s",stud[n+i].num);
  printf("\t\t\tstudent's name:");
  scanf("\t\t\t%s",stud[n+i].name);
  printf("\t\t\tstudent's score:");
  scanf("\t\t\t%d",&stud[n+i].score);
  gets(x); /*清除多余的输入*/
  printf("\t\t\tany more records?(Y/N)");
  scanf("\t\t\t%c",&sign); /*输入判断*/
  i++;
 }
 return(n+i);
} void Display(Student stud[],int n) /*显示所有记录*/
{
 int i;
 printf("\t\t\t-----------------------------------\n"); /*格式头*/
 printf("\t\t\tnumber name score\n");
 printf("\t\t\t-----------------------------------\n");
 for(i=1;i {
  printf("\t\t\t%-16s%-15s%d\n",stud[i-1].num,stud[i-1].name,stud[i-1].score);
  if(i>1&&i%10==0) /*每十个暂停*/
  {
   printf("\t\t\t-----------------------------------\n"); /*格式*/
   printf("\t\t\t");
   system("pause");
   printf("\t\t\t-----------------------------------\n");
  }
 }
 printf("\t\t\t");
 system("pause");
} void Sort_by_num(Student stud[],int n) /*按学号排序*/
{
 int i,j,*p,*q,s;
 char t[10];
 for(i=0;i  for(j=0;j   if(strcmp(stud[j].num,stud[j+1].num)>0)
   {
    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);
    p=&stud[j+1].score;
    q=&stud[j].score;
    s=*p;
    *p=*q;
    *q=s;
   }
} int Insert_a_record(Student stud[],int n) /*插入一条记录*/
{
 char x[10]; /*清除多余输入所用*/
 printf("\t\t\tstudent's num:"); /*交互式输入*/
 scanf("\t\t\t%s",stud[n].num);
 printf("\t\t\tstudent's name:");
 scanf("\t\t\t%s",stud[n].name);
 printf("\t\t\tstudent's score:");
 scanf("\t\t\t%d",&stud[n].score);
 gets(x);
 n++;
 Sort_by_num(stud,n); /*调用排序函数*/
 printf("\t\t\tInsert Successed!\n"); /*返回成功信息*/
 return(n);
} int Delete_a_record(Student stud[],int n) /*按姓名查找,删除一条记录*/
{
 char s[20];
 int i=0,j;
 printf("\t\t\ttell me his(her) name:"); /*交互式问寻*/
 scanf("%s",s);
 while(strcmp(stud[i].name,s)!=0&&i if(i==n)
 {
  printf("\t\t\tnot find!\n"); /*返回失败信息*/
  return(n);
 }
 for(j=i;j {
  strcpy(stud[j].num,stud[j+1].num);
  strcpy(stud[j].name,stud[j+1].name);
  stud[j].score=stud[j+1].score;
 }
 printf("\t\t\tDelete Successed!\n"); /*返回成功信息*/
 return(n-1);
} void Query_a_record(Student stud[],int n) /*查找并显示一个记录*/
{
 char s[20];
 int i=0;
 printf("\t\t\tinput his(her) name:"); /*交互式输入*/
 scanf("\t\t\t%s",s);
 while(strcmp(stud[i].name,s)!=0&&i if(i==n)
 {
  printf("\t\t\tnot find!\n"); /*输入失败信息*/
  return;
 }
 printf("\t\t\this(her) number:%s\n",stud[i].num); /*输出该学生信息*/
 printf("\t\t\this(her) score:%d\n",stud[i].score);
} void Statistic(Student stud[],int n) /*新增功能,输出统计信息*/
{
 int i,j=0,k=0,sum=0;
 float aver; /*成绩平均值*/
 for(i=0;i {
  sum+=stud[i].score;
  if(stud[j].score>stud[i].score) j=i;
  if(stud[k].score }
 aver=1.0*sum/n;
 printf("\t\t\tthere are %d records.\n",n); /*总共记录数*/
 printf("\t\t\tthe hignest score:\n"); /*最高分*/
 printf("\t\t\tnumber:%s name:%s score:%d\n",stud[j].num,stud[j].name,stud[j].score);
 printf("\t\t\tthe lowest score:\n"); /*最低分*/
 printf("\t\t\tnumber:%s name:%s score:%d\n",stud[k].num,stud[k].name,stud[k].score);
 printf("\t\t\tthe average score is %5.2f\n",aver); /*平均分*/
} int AddfromText(Student stud[],int n) /*从文件中读入数据*/
{
 int i=0,num;
 FILE *fp; /*定义文件指针*/
 char filename[20]; /*定义文件名*/
 printf("\t\t\tInput the filename:");
 scanf("\t\t\t%s",filename); /*输入文件名*/
 if((fp=fopen(filename,"rb"))==NULL) /*打开文件*/
 {
  printf("\t\t\tcann't open the file\n"); /*打开失败信息*/
  printf("\t\t\t");
  system("pause");
  return(n);
 }
 fscanf(fp,"%d",&num); /*读入总记录量*/
 while(i {
  fscanf(fp,"%s%s%d",stud[n+i].num,stud[n+i].name,&stud[n+i].score);
  i++;
 }
 n+=num;
 fclose(fp); /*关闭文件*/
 printf("\t\t\tSuccessed!\n");
 printf("\t\t\t");
 system("pause");
 return(n);
} void WritetoText(Student stud[],int n) /*将所有记录写入文件*/
{
 int i=0;
 FILE *fp; /*定义文件指针*/
 char filename[20]; /*定义文件名*/
 printf("\t\t\tWrite Records to a Text File\n"); /*输入文件名*/
 printf("\t\t\tInput the filename:");
 scanf("\t\t\t%s",filename);
 if((fp=fopen(filename,"w"))==NULL) /*打开文件*/
 {
  printf("\t\t\tcann't open the file\n");
  system("pause");
  return;
 }
 fprintf(fp,"%d\n",n); /*循环写入数据*/
 while(i {
  fprintf(fp,"%-16s%-15s%d\n",stud[i].num,stud[i].name,stud[i].score);
  i++;
 }
 fclose(fp); /*关闭文件*/
 printf("Successed!\n"); /*返回成功信息*/
} void main() /*主函数*/
{
 int n=0;
 for(;;)
 {
  switch(menu_select()) /*选择判断*/
  {
  case 1:
   printf("\t\t\tInput Records\n"); /*输入若干条记录*/
   n=Input(stu,n);
   break;
  case 2:
   printf("\t\t\tDisplay All Records\n"); /*显示所有记录*/
   Display(stu,n);
   break;
  case 3:
   printf("\t\t\tSort\n");
   Sort_by_num(stu,n); /*按学号排序*/
   printf("\t\t\tSort Suceessed!\n");
   printf("\t\t\t");
   system("pause");
   break;
  case 4:
   printf("\t\t\tInsert a Record\n");
   n=Insert_a_record(stu,n); /*插入一条记录*/
   printf("\t\t\t");
   system("pause");
   break;
  case 5:
   printf("\t\t\tDelete a Record\n");
   n=Delete_a_record(stu,n); /*按姓名查找,删除一条记录*/
   printf("\t\t\t");
   system("pause");
   break;
  case 6:
   printf("\t\t\tQuery\n");
   Query_a_record(stu,n); /*查找并显示一个记录*/
   printf("\t\t\t");
   system("pause");
   break;
  case 7:
   printf("\t\t\tStatistic\n");
   Statistic(stu,n); /*新增功能,输出统计信息*/
   printf("\t\t\t");
   system("pause");
   break;
  case 8:
   printf("\t\t\tAdd Records from a Text File\n");
   n=AddfromText(stu,n); /*新增功能,输出统计信息*/
   break;
  case 9:
   printf("\t\t\tWrite to a Text file\n");
   WritetoText(stu,n); /*循环写入数据*/
   printf("\t\t\t");
   system("pause");
   break;
  case 0:
   printf("\t\t\tHave a Good Luck,Bye-bye!\n"); /*结束程序*/
   printf("\t\t\t");
   system("pause");
   exit(0);
  }
 }
}