C语言课程设计报告 学生学籍管理系统

时间:2024.4.21

信息学院

课程设计Ⅰ报告

   

课程名称___C语言程序设计_  __

题目名称     学生学籍管理系统  

学生学院_      信息学院_ __ __

专业班级_       计科12        

学    号                      

学生姓名                      

指导教师_______       ___   __

                          2013 年12月26 日

目录

一、 设计目的与要求. 3

1.1 题目与设计要求. 3

1.2 本程序设计的知识点. 4

二、  功能设计. 4

2.1 总体设计. 4

2.2 详细设计. 5

4.1 测试结果及分析. 12

五、 总结. 14

六、参考文献. 14


一、 设计目的与要求

1.1 题目与设计要求

题目:学生学籍管理系统

目的:1、了解和熟悉Visual C++软件编程开发环境

2、熟练掌握结构化程序设计的步骤和模块化设计方法

3、熟练掌握C语言数据类型,熟记字符型数据和整形数据的定义和使用

4、熟练掌握用while语句、do…while语句和for语句实现循环结构程序设计的方法

5、掌握一维数组、二维数组的定义、赋值和输入输出的方法

6、掌握与数组有关的算法(特别是排序算法,熟练掌握冒泡排序法)

7、熟悉函数的定义、声明方法及全局变量和局部变量的概念与用法,掌握函数的调用方法

8、掌握结构体类型变量的定义和使用及结构体类型数组的概念和应用

设计要求:学生学籍信息管理系统设计

1、需求分析

学生基本信息、学生成绩基本信息要存入文件当中,因而要提供文件的输入输出操作;查询功能要求提供查找和显示操作;删除功能要求实现删除操作;排序功能要求实现排序操作;另外还应该提供键盘式选择菜单以实现功能选择。

2、总体设计

   整个系统可以设计为数据录入模块、数据查询模块、数据删除模块和数据排序模块。

3、详细设计

   设计学生基本信息和学生成绩基本信息结构体数组。

Struct

{

  int stuNo;        //学号

  char name[20];   //姓名

  char sex[2];     //性别

  int  domNum;   //宿舍号

  int  tel;        //电话号码

}StuInfo;   //学生基本信息结构体

Struct

{

  int stuNo;     //学号

  char courseNo;  //课程编号

  char courseName; //课程名称

  int creditHour; //学分

Int triGrade; //平时成绩

Int experiGrade; //实验成绩

Int examGrade; //卷面成绩

Float totalGrade; //综合成绩

Float finalCreHour; //实得学分

}StuGraInfo; //学生成绩基本信息结构体

(1)数据录入模块:学生基本信息文件可以在磁盘建立,采用写文件方式录入学生成绩基本信息。综合成绩和实得学分通过计算得到。

(2)查询模块:通过菜单选择查询功能,再选择学生基本情况查询和成绩查询,若选择前者,再通过菜单选择学号、姓名或宿舍号码,按照基本查找算法查找A.TXT,然后把查找结果输出若选择后者,则先在A.TXT中查找学号对应的姓名,再在B.TXT中查找该学生的课程情况,并统计科目和实得总学分,输出结果。

(3)删除模块:通过菜单选择删除学生的功能,输入要删除学生的学号,则分别在A.TXT和B.TXT中查找该生信息,删除之;或者输入学生的姓名,先在A.TXT中得到该生的学号,删除该生信息,再在B.TXT中删除该学号对应的信息。注意:C语言中没有直接删除信息的函数,需要自己实现,可以采取读出数据,判断数据(如果不删除,则进入缓冲区,否则删除),写入数据(把缓冲区中的数据写入文件)的步骤进行。

(4)排序模块:通过菜单选择排序依据,采用排序算法(冒泡、插入、选择等)对数据进行排序并输出结果。

1.2 本程序设计的知识点

   陈述开发过程中用到的知识点,如结构体、数组、指针等。

二、  功能设计

2.1 总体设计

其中包含数据录入模块、查询模块、删除模块、排序模块四大功能功能模块


2.2 详细设计


2.3分块设计



三、  程序实现

⑴利用了组合体的方式定义结构体数组,提供学生基本信息,定义如下:

typedef struct { 

    int Id;       //学号

    char name[10];//姓名

    char sex[6];  //性别

    int room;     //宿舍号

    int tel;      //电话号码

} StudentInfo;    //定义学生信息的结构体类型

⑵同时定义了另一结构体数组,提供学生成绩基本信息,定义如下:

typedef struct {

       int Id;

       char courseNo[10];  //课程编号

       char courseName[20];//课程名

       float a; // 课程学分

       float b; // 平时成绩

       float c; // 实验成绩

       float d; // 卷面成绩

       float e; // 综合成绩

       float f; // 实际学分

} MarkInfo;  //定义课程信息的结构体类型

使用以上结构体数组,使程序变得思路清晰,设计过程也变得相对简单。同时,定义并使用了如下函数,声明和定义

void ReadFile();            //读取文件

void DisplayMainMenu();    //显示主菜单

void DataInput();           //数据录入

void DataQuery();          //数据查询

void DataDelete();          //数据删除

void DataSort();            //数据排序

void QueryById(int );       //按学号查询

void QueryByRoom(int );    //按宿舍查询

void QueryMark(int );       //按成绩查询

void sort1();               //按综合成绩排序

void sort2();               //按实得学分排序

void markput();            //成绩输出

StudentInfo si[30];          // 学生信息结构数组

MarkInfo mi[150];          // 学生成绩结构数组

int  sp=0;                 // 学生信息结构数组中学生数

int  mp=0;                // 学生成绩结构数组中成绩数

***************读 取 数 据 、 计 算 ***************

在这段功能模块中,利用指针变量来读取结构体数组文件中的相应信息,是程序的编写、阅读和运行变得简洁明了。此外,在这段程序中,还对文件中的数据按照题目的具体要求对综合成绩和学分做了自动计算。

void ReadFile( )

{

       FILE *fp;

       if((fp = fopen("A.txt","r"))==NULL)

       printf("cant open the file\n");

      

       while (!feof(fp))

       {

              fscanf(fp,"%d%s%s%d%d", &si[sp].Id,si[sp].name,&si[sp].sex,&si[sp].room,&si[sp].tel);

              sp++;

       }

      

       fclose (fp);

       fp = fopen("B.txt","r");

       while (!feof(fp))

       {

              fscanf (fp,"%d%s%s%d%d%d%d",&mi[mp].Id,mi[mp].courseNo,mi[mp].courseName,&mi[mp].a,&mi[mp].b,&mi[mp].c, &mi[mp].d);

              if (mi[mp].c == -1)

                     mi[mp].e = 0.3*mi[mp].b+0.7*mi[mp].d;

              else

                     mi[mp].e = 0.15*mi[mp].b+0.15*mi[mp].c+0.7*mi[mp].d;

              if ( mi[mp].e >= 90. ) mi[mp].f = mi[mp].a;

              else if ( mi [mp].e >= 80. )

                     mi[mp].f = mi[mp].a *0.8;

              else if ( mi[mp].e >= 70. )

                     mi[mp].f = mi[mp].a *0.75;

              else if ( mi[mp].e >= 60. )

                     mi[mp].f = mi[mp].a *0.6;

              else mi[mp].f = 0;

              mp++;

       }

       fclose(fp);

}

*************** 显  示  主  菜  单 ***************

这部分是对本程序的主要功能做出的展示,体现了本程序的五大功能,简洁明白,一目了然。

Void DisplayMainMenu()

{

       printf (“\n 1) 数据录入 \n 2) 数据查询 \n 3) 数据删除 \n 4) 数据排序 \n 5) 程序结束 \n “);

}

*************** 数  据  录  入  模  块 *******************

录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据,即对关于学生成绩基本信息的结构体数组进行输入,也就是文件B.TXT中的内容。

void DataInput()

{

FILE *fp;

int i;

printf ("学生的学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩\n");

while(1)

{scanf ("%d%s%s%d%d%d%d",&mi[mp].Id,mi[mp].courseNo,mi[mp].courseName,&mi[mp].a,&mi[mp].b,&mi[mp].c, &mi[mp].d);

if(mi[mp].Id==-1)break;

if (mi[mp].c == -1)

              mi[mp].e = 0.3*mi[mp].b+0.7*mi[mp].d;

       else

              mi[mp].e = 0.15*mi[mp].b+0.15*mi[mp].c+0.7*mi[mp].d;

       if ( mi[mp].e >= 90. ) mi[mp].f = mi[mp].a;

       else if ( mi [mp].e >= 80. )

              mi[mp].f = mi[mp].a *0.8;

       else if ( mi[mp].e >= 70. )

              mi[mp].f = mi[mp].a *0.75;

       else if ( mi[mp].e >= 60. )

              mi[mp].f = mi[mp].a *0.6;

       else mi[mp].f = 0;

       mp++;

}

fp = fopen("B.txt","r+");

for(i=0;i<mp;i++)

       fprintf(fp,"%d%s%s%d%d%d%d",&mi[i].Id,mi[i].courseNo,mi[i].courseName,&mi[i].a,&mi[mp].b,&mi[i].c, &mi[i].d);

fclose(fp);

}

******************* 查   询  模  块********************

此段程序是为实现信息查询功能而设计的。总体来讲,分为两大功能模块,一是学生基本信息查询,二是对学生成绩的查询。在第一种查询,即对学生基本信息的查询中,又提供了两种查询方式,一种是按学号对学生基本信息进行查询,一种是按宿舍号码对学生基本信息进行查询。

 Void DataQuery()

{

       int x,y,z;

       printf( “\n 1) 学生基本情况查询\n 2) 成绩查询\n”);--------------------------选择查询内容

       scanf(“%d”,&x);

       if (x == 1) // 查询学生信息

       {

              printf (“1) 按学号查询 2) 按宿舍查询\n”);-------------------------------选择查询方式

              scanf(“%d”,&y);

              if  (y == 1 ) 

              {

                     printf ( “ 输入学号\n”);-----------------------------------------------按学生学号查询

                     scanf (“%d”,&z);

                     QueryById(z);

              }

              if  (y == 2)

              { 

       }

       if   ( x ==2)  // 查询成绩信息---------------------------------------查询学生成绩(输入学号)

       {

              printf ( “ 输入学号\n”);

              scanf (“%d”,&y);

              QueryMark(y);

       }

}

****************** 删   除  模  块 *******************

此模块提供了按学号实现删除学生信息的功能,当在文件A.TXT中删除一个学生时,自动地在文件B.TXT中删除此人所有信息。

void DataDelete()

{

       FILE *fp;

       int x;

       int i=0;

       int k,d;

       printf( "输入学号\n");

       scanf( "%d",&x);

       while( si[i].Id != x) i++;

       if (i<sp-1)

       {

              for ( k=i; k<sp-1; k++)

              {

                     si[k] = si[k+1];  

              }

       }

       if ( i<sp) sp--;

       d = 0; 

       for (k=0;k<mp;k++)

       {

              if ( mi[k].Id == x ) d++;

              else mi[k-d] = mi[k];

       }

       mp = mp - d;

       fp = fopen("D:B.txt","r+");

       for(i=0;i<mp;i++)

              fprintf(fp,"%d%s%s%d%d%d%d",&mi[i].Id,mi[i].courseNo,mi[i].courseName,&mi[i].a,&mi[i].b,&mi[i].c, &mi[i].d);

}

*************** 排 序  模  块 ******************

利用void sort1()函数按计算所得的综合成绩进行排序。

void sort1()

{

       int i,j;

       MarkInfo t;

       for (i=mp-1;i>=1;i--)

       {

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

              {

                     if (mi[j].e>mi[j+1].e)  

                     {

                            t=mi[j];

                            mi[j] = mi[j+1];

                            mi[j+1] = t;

                     }

              }

       }

       markput();

}

四、 测试分析

4.1 测试结果及分析

显示主菜单

数据录入功能。

  对成绩进行录入

(2)查询功能,按学号进行查询

(3)排序功能按综合成绩排序

(4)删除功能

退出程序

五、 总结

这次学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来才能做好每一件事。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体、文件、指针等。为了解决问题,最好就是多向同学,老师请教。

六、参考文献

参考文献必须是在课程设计中真正阅读过和运用过的,文献按照在正文中的出现顺序排列。

[1] 谭浩强,《C语言程序设计》(第四版)[M],清华大学出版社,20##年

[2]谭浩强.编著.C程序设计题解与上机指导.北京:清华大学出版社,1992

[3]潭浩.田淑清编著.PASCAL语言程序设计〔第二版〕.北京:高等教育出版社,1998

更多相关推荐:
学生成绩管理系统设计报告

电子信息科学与技术专业课程设计题单班级_***_学生***课程名称专业课程设计_课题密码锁的设计设计要求利用visualc#作为前台开发工具,SQLServer后台数据库管理,实现一学生成绩管理系统。实现具体功…

学生信息管理系统课程设计报告

数据库课程设计报告指导老师贺亚茹组名组长组员完成日期成绩数据库课程设计报告一项目名称学生信息管理系统二项目需求分析1项目需求分析简介本数据库的用户主要是学生通过对用户需求的收集和分析获得用户对数据库的如下要求1...

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

C语言课程设计报告一问题描述题目七学生成绩管理系统设计学生成绩信息包括学期学号班别姓名四门课程成绩语文数学英语和计算机等主要功能1能按学期按班级完成对学生成绩的录入修改2能按班级统计学生的成绩求学生的总分及平均...

java学生成绩管理系统课程设计报告以及代码共享

java学生成绩管理系统课程设计报告以及代码共享Java语言课程期末作业题目第9题学生成绩管理系统学院计算机学院专业计算机科学与技术班别学号姓名20xx年12月7日一课程题目设计一个简易的学生成绩管理系统用于记...

学生学籍管理系统课程设计报告

山东交通学院数据库课程设计学生学籍管理系统院系别信息科学与电气工程学院班级学号姓名指导教师时间课程设计任务书题目学生学籍管理系统系部信息科学与电气工程学院专业信息管理与信息系统班级学生姓名学号4月9日至4月20...

学生学籍管理系统课程设计报告

目录第一章需求分析211可行性分析研究212用户需求313使用范围414业务流程分析4第二章需求分析建模421实体联系图设计422系统数据流图723数据字典8第三章概要设计1031系统模块总体结构设计10311...

C#学生成绩管理系统课程设计报告

C程序设计课程设计报告2020学年第学期题目学生成绩信息管理系统专业班级姓名学号指导教师成绩年月日目录摘要1第一章绪论211设计目的212开发工具选择213开发环境214本报告的主要内容2第二章需求分析321系...

学生管理系统asp课程设计报告1

课程设计任务书题目学生信息管理系统设计与实现学号姓名专业信息管理课程Aspnet程序设计案例教程指导教师讲师完成时间2011年11月2011年12月枣庄学院计算机科学系制课程设计任务书及成绩评定IIIII目录1...

学生管理系统——Web课程设计报告

黔南民族师范学院计算机科学系Web程序设计课程设计报告20xx年12月黔南民族师范学院计算机科学系Web程序设计课程设计报告题目学生信息管理系统专业计算机信息管理班级姓名学号同组人员指导老师设计时间20xx年1...

基于sql的学生成绩管理系统(数据库)_课程设计报告

基于sql的学生成绩管理系统数据库课程设计报告一实验题目学生证管理系统数据库的设计与实现描述设计一个学生证管理系统实现下列功能1录入某位学生的学生证信息2给定学号查询某位学生的学生证信息3给定班号显示该班所有学...

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

目录摘要11需求分析22详细设计说明221功能模块图222数据结构设计3221学生成绩信息结构体3222单链表node结构体323功能模块设计4231主函数main执行流程4232输入学生信息模块4233查询学...

C语言课程设计报告学生成绩管理系统(广工)

一课程设计题目学生成绩管理二需求分析给出n个学生的m门考试的成绩表每个学生的信息由学号姓名性别以及各科成绩组成对学生的考试成绩进行有关统计按总数高低次序打印出名次表分数相同的为同一名次按名次打印出每个学生的学号...

学生管理系统课程设计报告(25篇)