网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > 课程设计 > 正文

C语言课程设计之学生成绩简单管理程序

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务
C语言课程设计之学生成绩简单管理程序|c语言程序代码编程小程序设计|c语言课程设计报告课程案例系统菜单的主要功能
(1)输入若干条记录
(2)显示所有记录
(3)按学号排序
(4)插入一条记录
(5)按姓名查找,删除一条记录
(6)查找并显示一条记录
(7)输出统计信息 (新增)
(8)从正文中添加数据到结构体数组中
(9)将所有数据写入文件中
    (0)退出程序
2.   题目分析
该题主要考察学生对结构体,指针,文件的操作,以及C语言算法的掌握,所以完成此道题目要求较强的设计能力,尤其是要有一种大局观的意识。如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。
菜单中的每一个选项都对应一个子程序,子程序的算法几乎囊获了所有C语言学过的技巧,下面就各个子程序中的功能进行说明:
功能1和4的算法相似,输入一条记录到结构体中去,其中有一部很关键,就是通过gets将所有的多余的字符,回车读去,否则就会出错。
功能2是显示所有的记录,通过循环输出,格式也比较重要。
功能3为按学号排序,因为学号定义成了字符数组的形式,因此在运用冒泡法进行排序的时候,要用到strcmp,strcpy等函数。
功能5为按姓名删除记录,先输入姓名,再一一比较,如果没有则返回失败信息,如果找到就将此记录都向前移一位,返回n-1。
功能6的算法在5中就已经体现了,输入姓名,一一比较。
功能7为新增的功能,因为考虑到原来给出的函数中竟然没有对学生成绩的统计功能,因此新增此功能,可以得出所有的记录个数,最高、最低、平均分,并输出相关的学生信息等。
功能8和9是对文件的操作,提前准备好数据。
3.   感受
学了将近一个学期的C语言了,说实话,挺疲惫的,特别是最后的课设,调得好烦。但现在想想收获也不小,以前高中学VB的时候,一直觉得计算机语言挺简单的,现在看来当时根本没有接触到计算机语言的精髓。
看到了自己做出的这个小程序,挺自豪的,以前一直以为做出一个软件一样的程序是遥不可及的事情。我选择的是第二个程序,因为自我觉得它涉及面更广,把以前学过的算法几乎都过了一遍。以后在碰到像等级考试这样的事情我就再也不怕了。
谢藏洌老师的热情指导。
恭维的话就不多说了,感受大概就这么多吧。
4.   程序正文部分
#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);
}
 

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);
                             }
                    }
}
 
4 .函数调用关系图






Reverse(head)函数
按学号排序
5.设计测试流程
 
1、进入界面
  
2、输入选项1,回车;
  按提示输入数据:

 
3、回到主菜单;
  输入选项7,回车;
   输入文件名:data.txt,回车;
   出现成功提示,则读入文件操作成功。

 
   4、回到主菜单,输入2,回车
          每10个暂停显示数据

5、回到主菜单,输入3,回车
   出现排序成功信息。

 
6、回到主菜单,输入4,回车
   按提示插入一组数据

 
7、回到主菜单,输入5,回车
   按提示输入姓名,删除数据
   出现删除成功的信息
 

 
8、回到主菜单,输入6,回车
   输入姓名进行查询
 

9、回到主菜单,输入7,回车
   出现统计信息
 
10、回到主菜单

,输入9,回车
输入result.txt,回车
出现成功写入文件的信息

 
11、回到主菜单,输入0,回车退出系统
设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师