c语言学生成绩管理系统程序设计报告

img

  • 程序设计分析的结果(分析步骤及算法图)

  • 编程需要的数据结构及中午说明

  • 程序设计的框图

  • 程序设计的代码

  • 程序运作的结果及出错原因

  • 报告的体会与感受

实现代码:

#include <stdio.h>
#define MAX 200   //最大学生数
typedef struct 
{
    char name[20];    //姓名
    char num[8];    //学号
    int a;      // 成绩1
    int b;      //成绩2
    int c;      //成绩3...
    int d;
    int e;
    int f;
}student;
student stu[MAX];    //定义存储学生成绩结构体为全局变量
int menu()
{
    /*
    * function name:menu()
    * function: show the menu and return a order code "choose"
    */
    int choose;
    printf("                        主菜单                 \n");
    printf("================================================\n");
    printf("1、输入学生成绩\n");
    printf("2、按姓名查询学生成绩\n");
    printf("3、按学号查询学生成绩\n");
    printf("4、打印输出学生成绩\n");
    printf("0、退出系统\n");
    printf("选择功能:\n");
    scanf("%d", &choose);         //选择功能指令
    return choose;
}
int stu_num()
{
    int n;
    printf("请输入要输入的学生数量n:\n");
    scanf("%d", &n);
    return n;
}
float *average(int n)
{
    /*
    * 函数名:average
    * 函数功能:求每个学生成绩平均值
    */
    int i, sum[MAX] = { 0 };   //sum[]表示每个学生的总成绩
    float ave[MAX];               //ave[]表示每个学生的平均成绩
    for (i = 0; i < n; i++)
    {
        sum[i] += stu[i].a + stu[i].b + stu[i].c + stu[i].d + stu[i].e + stu[i].f;
    }
    for (i = 0; i < n; i++)
        ave[i] = (double)sum[i] / 6;
    return ave;
}
void Insert(int n)        
{
    /*
    * 函数名:Insert()
    * 函数功能:录入学生成绩;
    */
    int i;
    for (i = 0; i < n; i++)
    {
        printf("姓名:");
        getchar();
        gets(stu[i].name);
        printf("学号:");
        gets(stu[i].num);
        printf("请输入6门成绩(用空格隔开):");
        scanf("%d %d %d %d %d %d",&stu[i].a, &stu[i].b, &stu[i].c, &stu[i].d, &stu[i].e, &stu[i].f);
    }
}
void FindByName(int n)
{
    int i, count = 0;
    char str[20];       //储存查询学生的姓名
    printf("请输入查询学生的姓名:");
    getchar();
    gets(str);          //输入查询名字
    float *ave=(float *)malloc(sizeof(float)*MAX);
    ave = average(n);
    for (i = 0; i < n; i++)
        if (strcmp(str, stu[i].name) == 0)
        {
            count++;
            printf("姓名\t学号\t成绩1\t成绩2\t成绩3\t成绩4\t成绩5\t成绩6\t平均成绩\n");
            printf(" %s \t%s \t%d \t%d \t%d \t%d \t%d \t%d \t%f\n", stu[i].name,stu[i].num, stu[i].a, stu[i].b, stu[i].c, stu[i].d, stu[i].e, stu[i].f, ave[i]);
            break;
        }
    if (count == 0)
    {
        printf("没有这个学号的学生成绩");
    }
}
void FindByNum(int n)
{
    int i,count=0;
    char str_num[20];       //储存查询学生的学号
    printf("请输入查询学生的学号:");
    getchar();
    gets(str_num);          //输入查询名字
    float* ave = (float*)malloc(sizeof(float) * MAX);
    ave = average(n);
    for (i = 0; i < n; i++)
    {
        if (strcmp(str_num, stu[i].num) == 0)
        {
            count++;
            printf("姓名\t学号\t成绩1\t成绩2\t成绩3\t成绩4\t成绩5\t成绩6\t平均成绩\n");
            printf(" %s \t%s \t%d \t%d \t%d \t%d \t%d \t%d \t%f\n", stu[i].name,stu[i].num, stu[i].a, stu[i].b, stu[i].c, stu[i].d, stu[i].e, stu[i].f, ave[i]);
            break;
        }
    }   
}
void Print(int n)
{
    int i = 0;
    for (i = 0; i < n; i++)
    {
        printf("姓名\t学号\t成绩1\t成绩2\t成绩3\t成绩4\t成绩5\t成绩6\t平均成绩\n");
        printf(" %s \t%s \t%d \t%d \t%d \t%d \t%d \t%d\n", stu[i].name, stu[i].num, stu[i].a, stu[i].b, stu[i].c, stu[i].d, stu[i].e, stu[i].f);
    }
}
int main()
{

    int student_num;
    student_num = stu_num();
    while (1)
    {
        int choose;
        choose = menu();
        switch (choose)
        {
        case 1:
            Insert(student_num);
            break;
        case 2:
            FindByName(student_num);
            break;
        case 3:
            FindByNum(student_num);
            break;
        case 4:
            Print(student_num);
            break;
        case 0:
            printf("谢谢使用\n");
            system("pause");
            exit();
        default:
            printf("输入错误,请重新输入\n");
            break;
        }
    }
    

  
}

运行结果:

img

#include<stdio.h>
#include<string.h>
#include<malloc.h>

typedef struct Student{
    char Name[15];
    char Xuehao[9];
    int GaoShu;            //高等数学 
    int WuLi;            //大学物理 
    int CYuYan;            //C语言 
    int SuanFa;            //算法设计
    int AnZhuo;            //安卓设计 
    int Python;            //Pythoo
    float ave;
}Stu;

void Menu();
void Add();
void SearchByName();
void SearchByXueHao();
void Print();

Stu *S;
int S_count = 0;

int main(){
    S = (Stu*)malloc(sizeof(Stu));
    int choice;
    bool exit = false;
    while(1){
        Menu();
        scanf("%d", &choice);
        switch(choice){
            case 1:
                Add();
                break;
            case 2:
                SearchByName();
                break;
            case 3:
                SearchByXueHao();
                break;
            case 4:
                Print();
                break;
            case 0:
                printf("谢谢使用\n");
                exit = true;
                break;
            default:
                printf("输入错误,请重新输入\n\n");
        }
        if(exit){
            break;
        }
    }
    if(S_count == 0){
        delete S;
    }else{
        delete[] S;
    }
    return 0;
}

void Menu(){
    printf("                主菜单\n");
    printf("========================================\n"); 
    printf("  1、输入学生成绩\n");
    printf("  2、按姓名查询学生成绩\n");
    printf("  3、按学号查询学生成绩\n"); 
    printf("  4、打印输出学生成绩\n"); 
    printf("  0、退出系统\n"); 
    printf("========================================\n");
    printf("  请选择(0-4):");
}

void Add(){
    printf("请输入学生姓名:");
    scanf("%s", S[S_count].Name);
    printf("请输入学生学号:");
    scanf("%s", S[S_count].Xuehao);
    printf("请输入高等数学成绩:");
    scanf("%d", &S[S_count].GaoShu);
    printf("请输入大学物理成绩:");
    scanf("%d", &S[S_count].WuLi);
    printf("请输入C语言成绩   :");
    scanf("%d", &S[S_count].CYuYan);
    printf("请输入算法设计成绩:");
    scanf("%d", &S[S_count].SuanFa);
    printf("请输入安卓设计成绩:");
    scanf("%d", &S[S_count].AnZhuo);
    printf("请输入Python成绩  :");
    scanf("%d", &S[S_count].Python);
    S[S_count].ave = (S[S_count].GaoShu+S[S_count].WuLi+S[S_count].CYuYan+S[S_count].SuanFa+S[S_count].AnZhuo+S[S_count].Python)/6.0;
    S_count++;
    S = (Stu*)realloc(S, (S_count+1)*sizeof(Stu));
    printf("添加完成!\n\n");
}

void SearchByName(){
    if(S_count == 0){
        printf("学生数据为空!\n\n");
        return;
    }
    char Name[15];
    int i;
    printf("请输入姓名:");
    scanf("%s", Name);
    for(i = 0; i < S_count; i++){
        if(strcmp(Name, S[i].Name) == 0){
            break;
        }
    }
    if(i == S_count){
        printf("查无此项!\n\n");
    }else{
        printf("高等数学   大学物理   C语言   算法设计   安卓设计   Python   平均分\n");
        printf("  %3d        %3d      %3d      %3d         %3d       %3d     %.2f\n\n", S[i].GaoShu, S[i].WuLi, S[i].CYuYan, S[i].SuanFa, S[i].AnZhuo, S[i].Python, S[i].ave);
    }
}

void SearchByXueHao(){
    if(S_count == 0){
        printf("学生数据为空!\n\n");
        return;
    }
    char XueHao[9];
    int i;
    printf("请输入学号:");
    scanf("%s", XueHao);
    for(i = 0; i < S_count; i++){
        if(strcmp(XueHao, S[i].Xuehao) == 0){
            break;
        }
    }
    if(i == S_count){
        printf("查无此项!\n\n");
    }else{
        printf("高等数学   大学物理   C语言   算法设计   安卓设计   Python   平均分\n");
        printf("  %3d        %3d      %3d      %3d         %3d       %3d     %.2f\n\n", S[i].GaoShu, S[i].WuLi, S[i].CYuYan, S[i].SuanFa, S[i].AnZhuo, S[i].Python, S[i].ave);
    }
}

void Print(){
    if(S_count == 0){
        printf("学生数据为空!\n\n");
        return;
    }
    char XueHao[9];
    int i;
    printf("请输入学号:");
    scanf("%s", XueHao);
    for(i = 0; i < S_count; i++){
        if(strcmp(XueHao, S[i].Xuehao) == 0){
            break;
        }
    }
    if(i == S_count){
        printf("查无此项!\n\n");
    }else{
        printf("姓名       学号       高等数学   大学物理   C语言   算法设计   安卓设计   Python   平均分\n");
        printf("%-8s  %-8s     %3d         %3d      %3d      %3d         %3d       %3d     %.2f\n\n", S[i].Name, S[i].Xuehao, S[i].GaoShu, S[i].WuLi, S[i].CYuYan, S[i].SuanFa, S[i].AnZhuo, S[i].Python, S[i].ave);
    }
}

一、课程设计题目
《学生成绩管理系统》
二、课程设计要求
综合利用顺序、选择、循环等各种程序结构,使用自定义函数和二维数组,完成任务。
三、课程设计思路
3.1功能要求
该系统运行在DOS环境下,人机界面为命令行文本界面。完成的任务是对若干人的成绩信息进行管理,且数据保存到文件中。
实现的主要功能是:
系统以用户名和密码进行登录
学生信息和成绩输入功能
查询学生信息及成绩功能
打印学生信息及成绩功能
以稳健的形式进行保存

3.2 设计环境
所使用的语言采用标准C,开发工具可选用在DOS环境下的Turbo C

3.3分析问题
学生成绩管理系统的整体功能都包括:登录口令、学生成绩输入、学生成绩打印、学生成绩查询四大板块,而成绩输入有包括学号,C语言成绩,数据库成绩,网页成绩,四个模块。
(1)设计的数据对象包括整形:学号;字符型:姓名、3门课程成绩、总成绩、平均成绩。
(2)数据结构线性数据结构,定义人数上限为40.

3.4 数据结构
本系统是对学生成绩的信息进行管理,学生成绩信息采用C的结构体数据类型描述,定义如下:
struct students
{
int num; //学号-整型//
char C语言; //C语言-字符型//
char 数据库; //数据库-字符型//
char 网页; //网页-字

3.4模块设计
根据功能要求,本系统为五大主要模块,具体模块如表所示。
表 学生信息成绩管理系统的模块

main() 主控函数
void luRu(int num) 录入学生信息
void xueHaoChaXun(int num,int xueHao) 查询学生信息
void daYin (int num) 打印学生信息
四、课程流程图

img

五、课程设计源码

#include <stdio.h>       //标准输入输出函数库
#include <stdlib.h>      //标准函数库    
#include <string.h>      //字符串函数库    
#include <conio.h>       //屏幕操作函数库    
#define HEADER "学号    C语言    数据库    网页\n"
#define FORMAT "%3d\t%3d\t%3d\t%3d\n"
#define N 40
int score[N][4];
int i,j; 
void dengLu();           //登录函数声明    
void luru();
void chengjiluru(int num);
void chengjichaxun(int num,int xueHao);
void chengjidayin (int num);
int main(void)
{
  dengLu();
}
void dengLu()    
{        
  char username[30];  
  char password[10];  
  printf("****************************************************\n");
  printf("********** 学 生 成 绩 管 理 系 统 登 录  **********\n");
  printf("****************************************************\n");
  printf("-->请输入用户名:");    
  gets(username);
  printf("-->请输入密码:");
  gets(password);    
if(strcmp(username, "JasonLi")== 0 && strcmp(password, "123456") == 0)
  {    
    printf("欢迎登录!\n");
    luru();    
  }
  else
  {        
    printf("-->用户名和密码错误,按任意键重试...\n");
    getch();
    system("cls");   //清屏 
    dengLu();   //递归调用dengLu      
  }
}
void luru()
 {
    int n;
    int xueHao;
    printf("请输入班级学生人数:");
    scanf("%d",&n);
    chengjiluru(n);
    chengjidayin(n);
    printf("请输入要查找的学号:");
    scanf("%d", &xueHao);
    chengjichaxun(n,xueHao);
 }
 
 
 
 void chengjiluru(int num)
 {
   printf("************************************\n");
   printf("****      学 生 成 绩 录 入     ****\n");
   printf("************************************\n");
   printf(HEADER);
        for(i=0;i<num;i++)
   {
     printf("%3d\t",i+1);
     score[i][0]=i+1;
     for(j=1;j<4;j++)
       scanf("%d",&score[i][j]);
    }
                    }
 
 
 void chengjichaxun(int num,int xueHao)        
 {    
   printf("************************************\n");
   printf("**** 按 学 号 查 询 学 生 成 绩 ****\n");
   printf("************************************\n");
       for (i=0;i<num;i++)
        {
            if (xueHao==score[i][0])        //查找到符合条件的记录输入  
            {           
            printf(HEADER);                
            printf(FORMAT, score[i][0],score[i][1],score[i][2],score[i][3]);
            break;
            }
        }
            if(i==num)
            {
                printf("您输入的学号不存在!\n");
            }
        system("pause");
   }
 
 void chengjidayin (int num)        
 {        
    printf("************************************\n");
    printf("****        成 绩 打 印         ****\n");
    printf("************************************\n");
    printf(HEADER);
    for(i=0;i<num;i++)printf(FORMAT,
score[i][0],score[i][1],score[i][2],score[i][3]);
 }


六、运行界面截图

img


img


img


img