精华内容
下载资源
问答
  • C语言课程设计报告C语言课程设计报告
  • C语言课程设计报告

    2014-04-09 18:12:51
    C语言课程设计报告
  • c语言课程设计报告

    2015-05-22 19:35:07
    c语言程序设计报告,基于c语言,欢迎下载
  • c语言课程设计报告模版.doc
  • C语言课程设计报告范例
  • C语言课程设计报告 职工信息管理系统 有伪代码思维导图 欢迎界面可调 有增删改查功能 附各个功能的模块代码 以及程序整个的代码
  • C语言课程设计报告总结C语言课程设计报告总结
  • C语言课程设计报告(贪吃蛇).docx
  • c语言实现贪吃蛇代码可随意下载 c语言课程设计报告也可随意下载1.本代码在VS2013下可正常运行,其他版本需根据版本需要进行调试。2.代码在Csnake-Csnake里,想直接打开整个工程直接进入Cnak...

     

    原文作者:aircraft

    原文地址:https://www.cnblogs.com/DOMLX/p/8846529.html

     

    注:本文档需与c语言课程设计之贪吃蛇文档配套使用。c语言实现贪吃蛇代码可随意下载 c语言课程设计报告也可随意下载
    1.本代码在VS2013下可正常运行,其他版本需根据版本需要进行调试。
    2.代码在Csnake-Csnake里,想直接打开整个工程直接进入Cnake,点击Csnake.sln打开  注意这里可能需要使用相关的IDE环境才能打开,没有相关环境的话,复制代码自己创建个工程就行了很简单的。
    3.代码注释为全英文注释,若有疑问可借助百度翻译,或者看文档报告。

     

    文档链接可直接百度云下载:链接:https://pan.baidu.com/s/1vnXkR8d9-R5lAYpxzcMYxw 密码:i1q6

     

    后面在下的博客可能还会有大学常见的课设代码和报告发布,比如c++MFC课设,数据库课设,WEB课设,网络编程课设,linux课设,数据结构课设,python课设,matlab课设,,,想要的话就关注在下的博客吧嘿嘿-----

     

     

    说到大学都要做的课程设计和报告我还是决定分享出来,为什么呢?(大学就是给这些无聊的课程,无聊报告和画图耽误的,才会有那么多大学生找不到工作)节省大家时间啦 嘿嘿。。。。。。请叫我雷锋先生。。。

    说到贪吃蛇还是直接上代码吧,解释最后来。。。。。

    首先是main.cpp文件,控制调用函数。

    #include "snake.h"
    
    //Transposed structure object
    extern  struct Food food;
    extern  struct Snake snake;
    
    //main function
    int main()
    {
        ret = menu();
        if (ret == 1)
        {
            while (finish)
            {
                initMap();                                                                    //Initialization map
                while (TRUE)
                {
                    updataFood();                                                        //updata food
                    getSpeed();                                                            //speed
                    moveSnake();                                                        //move snake
                    Sleep(snake.speed);                                                    //Control the speed of the snake
                    printFont(FONT_WINDOW_STARTX, FONT_WINDOW_STARTY, snake.speed);        //Right interface
                    if (!(isAlive()))
                        break;
                }
                if (finish)                                                                    //Death or customs clearance
                {
                    system("cls");
                    gotoxy(22, 5);
                    printf("Game Over!");
                    gotoxy(24, 5);
                    printf("按(1)键退出游戏,按其他任意键重玩");
                    if (getch() == 49)
                        break;
                    system("cls");
                }
                else
                {
                    system("cls");
                    gotoxy(22, 5);
                    printf("恭喜你通关了");
                    gotoxy(24, 5);
                    printf("按(1)键退出游戏,按其他任意键重玩");
                    if (getch() == 49)
                        break;
                    system("cls");
                }
                
            }
            
        }
    
        return 0;
    }

     

    snake.h 主要声明函数和定义变量。

    #pragma once
    #ifndef _SNAKE_H_
    #define _SNAKE_H_
    #include <stdio.h>
    #include <windows.h>
    #include <time.h>
    #include <conio.h>
    #include <time.h>
    #pragma warning(disable: 4996)
    
    
    
    #define FONT_WINDOW_STARTY 41 //define font window 
    #define FONT_WINDOW_STARTX 2
    #define FRAME_HEIGHT 20 //define map size
    #define FRAME_WIDTH 40
    #define UP 'w' //define operate key
    #define DOWN 's'
    #define LEFT 'a'
    #define RIGHT 'd'
    #define SNAKE_LEN 50
    #define ADD 3
    
    
    static int i, j, k;
    static char ch = UP; //initial first direction
    static char Direction = UP;
    static int grow = 0; //flag: if snake grow
    static int ret = 0;
    static int finish = 1;
    
    //Structure declaration
    struct Food{
        int x;
        int y;
    };
    struct Snake{
        int x[SNAKE_LEN];
        int y[SNAKE_LEN];
        int len;
        int speed;
    }; //snake[0] is head
    
    
    //Initialization map
    void initMap(void);
    
    //updataFood
    void updataFood(void);
    
    //moveSnake
    void moveSnake(void);
    
    //Judge whether the snake is alive or not
    int isAlive(void);
    
    //get snake speed
    void getSpeed(void);
    
    //move cursor
    void gotoxy(int x, int y);
    
    //Right interface
    void printFont(int x, int y, int speed);
    
    //menu
    int menu();
    
    
    #endif

    snake.cpp文件 主要实现函数功能。

    #include "snake.h"
    
    //Initialization of structure
    struct Food food;
    struct Snake snake;
    
    
    
    //menu
    int menu()
    {
        gotoxy(14, 45);
        printf("欢迎来到贪吃蛇小游戏....");
        gotoxy(16, 45);
        printf("开始游戏请按(1)");
        gotoxy(18, 45);
        printf("按其他任意键退出游戏QAQ");
        int ch = getch();
    
        while (TRUE)
        {
            if (ch == 49)                                    //The ASCII value of 1
            {
                ret = 1;
                break;
            }
            else
            {
                break;
            }
    
    
        }
        system("cls");
        return ret;
    }
    
    //initialize Map
    void initMap(void)
    {
        ch = UP;
        Direction = UP;
        //initial food
        srand(time(NULL));                                    //Set random number seed
        food.x = rand() % (FRAME_HEIGHT - 2) + 1;
        food.y = rand() % (FRAME_WIDTH - 2) + 1;
        gotoxy(food.x, food.y);
        printf("!");
        //initial snake
        snake.x[0] = FRAME_HEIGHT / 2;
        snake.y[0] = FRAME_WIDTH / 2;
        gotoxy(snake.x[0], snake.y[0]);
        printf("@");
        snake.len = 3;
        snake.speed = 200;
        for (k = 1; k<snake.len; k++)
        {
            snake.x[k] = snake.x[k - 1] + 1;
            snake.y[k] = snake.y[k - 1];
            gotoxy(snake.x[k], snake.y[k]);
            printf("@");
        }
        //initial bar
        for (j = 0; j<FRAME_WIDTH; j++)
        {
            gotoxy(0, j);
            printf("#");
            gotoxy(FRAME_HEIGHT - 1, j);
            printf("#");
        }
        for (i = 1; i<FRAME_HEIGHT - 1; i++)
        {
            gotoxy(i, 0);
            printf("#");
            gotoxy(i, FRAME_WIDTH - 1);
            printf("#");
        }
    }
    
    //Right interface
    void printFont(int x, int y, int speed)
    {
        int i = 1;
        gotoxy(x, y);
        printf("召唤师,欢迎来到贪吃蛇峡谷");
    
        gotoxy(x + ADD, y);
        if (speed == 200)
        {
            printf("现在的速度是:%d级", i);
        }
        else if (speed == 100)
        {
            printf("现在的速度等级是:%d级", i + 1);
        }
        else if (speed == 50)
        {
            printf("现在的速度等级是:%d级", i + 2);
        }
        else
        {
            printf("恭喜你,召唤师,现在是最高级");
        }
        gotoxy(x + 2 * ADD, y);
        printf("上下左右操作键分别是:w,s,a,d");
    
        gotoxy(x + 3 * ADD, y);
        printf("当吃到自己身体或者撞墙时游戏结束");
    
        gotoxy(x + 4 * ADD, y);
        printf("按空格键暂停,在按空格键继续");
    }
    
    //generate food
    void updataFood()
    {
        if (snake.x[0] == food.x&&snake.y[0] == food.y)                //When the snake eats food update
        {
            srand(time(NULL));
            food.x = rand() % (FRAME_HEIGHT - 2) + 1;
            food.y = rand() % (FRAME_WIDTH - 2) + 1;
            gotoxy(food.x, food.y);
            printf("!");
    
    
            snake.len++;
            grow = 1;
        }
    }
    
    //move snake
    void moveSnake()
    {
    
        if (!grow)
        {
            gotoxy(snake.x[snake.len - 1], snake.y[snake.len - 1]);
            printf(" ");                            //The tail will be empty
        }
        for (k = snake.len - 1; k>0; k--)
        {
            snake.x[k] = snake.x[k - 1];
            snake.y[k] = snake.y[k - 1];
        }
        if (kbhit())
        {
            ch = getch();
            if (ch == ' ')                                                //Pause or continue by space
            while (getch() != ' '){};
            if (ch != UP && ch != DOWN && ch != LEFT && ch != RIGHT)    //Other keys to prevent interference
            {
                ch = Direction;
                goto sport;
            }
    
            if (Direction != ch)
            {
                if ((Direction == UP &&ch != DOWN) || (Direction == DOWN &&ch != UP) || (Direction == LEFT && ch != RIGHT) || (Direction == RIGHT && ch != LEFT)) //Prevent reverse movement
                {
                    Direction = ch;
                    goto sport;
                }
                else
                {
                    ch = Direction;
                    goto sport;
                }
    
            }
            else
            {
                goto sport;
            }
        }
        else
        {
        sport:
            switch (ch)                            //Move the snake's head
            {
            case UP: snake.x[0]--; break;
            case DOWN:  snake.x[0]++; break;
            case LEFT: snake.y[0]--; break;
            case RIGHT: snake.y[0]++; break;
            default: break;
    
            }
        }
    
        gotoxy(snake.x[0], snake.y[0]);
        printf("@");                            //print the snake's head
        grow = 0;
        gotoxy(FRAME_HEIGHT, 0);
    }
    
    //Judge whether the snake is alive or not
    int isAlive(void)
    {
        if (snake.x[0] == 0 || snake.x[0] == FRAME_HEIGHT - 1 || snake.y[0] == FRAME_WIDTH - 1 || snake.y[0] == 0)   //When you touch a wall or eat your own body, you die
            return 0;
        for (k = 1; k<snake.len; k++)
        if (snake.x[k] == snake.x[0] && snake.y[k] == snake.y[0])
            return 0;
        return 1;
    }
    
    //speed updata
    void getSpeed(void)
    {
        if (snake.len <= 6)
            snake.speed = 200;
        else if (snake.len <= 10)
            snake.speed = 100;
        else if (snake.len <= 20)
            snake.speed = 50;
        else if (snake.len <= 30)
            snake.speed = 30;
        else snake.speed = 20;
        if (snake.len == 40)
            finish = 0;
    }
    
    //move cursor
    void gotoxy(int x, int y)
    {
        HANDLE hout;                                //Defining handle objects
        COORD cor;                                    //Defining coordinate objects
        hout = GetStdHandle(STD_OUTPUT_HANDLE);        //Get the handle of the output screen buffer
        cor.X = y;
        cor.Y = x;
        SetConsoleCursorPosition(hout, cor);        //Move Cursor
    }

    接下来是课程设计的报告。

     

    1. 课程设计目的1

    2. 课程设计的内容1

    3. 课程设计的功能要求1

    3.1. 菜单模块:1

    3.2. 地图初始化模块:1

    3.3. 食物更新模块:1

    3.4. 移动贪吃蛇模块:1

    3.5. 贪吃蛇生命模块:1

    3.7.  获取贪吃蛇速度模块.........................................................................................................1

    3.7.  移动窗口光标模块.............................................................................................................1

    3.8    帮助系统模块.........................................................................................................................................1

    3.8    退出系统模块.........................................................................................................................................1

    4. 概要设计2

    4.1. 系统功能框架图2

    4.2. 功能模块描述2

    5. 详细设计3

    5.1. 各功能模块的具体实现算法——流程图3

    5.1.1. 主控main函数流程图3

    5.2. 重点设计描述3

    6. 系统测试与调试3

    7. 课程设计心得体会4

    参考资料4

     

    1. 课程设计目的

    进一步加深、巩固所学专业课程《C语言程序设计》的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。掌握运用C语言独立地编写、调试应用程序和进行其它相关设计的技能。熟悉使用结构体与时间函数和windows窗口控制函数。

    2. 课程设计的内容

    设计并实现一个贪吃蛇小游戏,要求具有以下功能模块:

    (1) 页面菜单模块。

    (2) 初始化地图模块。

    (3) 食物更新模块。

    (4) 移动贪吃蛇模块。

    (5) 判断贪吃蛇是否存活模块。

    (6) 获取贪吃蛇速度模块

    (7) 移动窗口光标模块。

    (8) 帮助系统模块

    (9) 退出系统模块

    3. 课程设计的功能要求

    3.1. 页面菜单模块:

    ² 开始游戏

    ² 退出游戏

    3.2. 初始化地图模块:

    ² 实现贪吃蛇存在范围(这里用围墙来限定区域)

    ² 初始化贪吃蛇(3单位身体长度)

    ² 初始化食物

    3.3. 食物更新模块:

    ² 在区域内随机刷新食物

    ² 食物不与蛇身体重合

    3.4. 移动贪吃蛇模块:

    ² 根据玩家按键移动贪吃蛇(w,s,a,d)

    ² Space 空格可暂停或继续游戏

    ² 当贪吃蛇前进时按相反方向移动无效

    ² 除了程序控制键之外的其他按键不会影响贪吃蛇

    ² 移动贪吃蛇时不会造成屏幕闪烁BUG

    3.5. 贪吃蛇生命模块:

    ² 当蛇吃到自己身体或者触碰围墙时蛇死亡

    3.6. 获取贪吃蛇速度模块:

    ² 根据蛇的身体长度来设置速度等级

    ² 当身体长度足够长时则通关游戏

     

    3.7. 移动光标模块:

    ² 获取输出流窗口句柄

    ² 定义使用存储坐标结构体

    ² 将坐标与窗口句柄传入函数实现移动光标

     

    3.8. 帮助系统模块:

    ² 提示玩家一些按键控制和游戏规则

     

    3.9. 退出系统模块:

    ² 游戏通关或游戏结束时给予退出或重玩选择

     

     

     

    4. 概要设计

    4.1. 系统功能框架图

     

     

    1 系统功能模块图

    4.2. 各功能模块描述:

    4.3. 页面菜单模块:

    ² 开始游戏

    ² 退出游戏

    4.4. 初始化地图模块:

    ² 实现贪吃蛇存在范围(这里用围墙来限定区域)

    ² 初始化贪吃蛇(3单位身体长度)

    ² 初始化食物

    4.5. 食物更新模块:

    ² 在区域内随机刷新食物

    ² 食物不与蛇身体重合

    4.6. 移动贪吃蛇模块:

    ² 根据玩家按键移动贪吃蛇(w,s,a,d)

    ² Space 空格可暂停或继续游戏

    ² 当贪吃蛇前进时按相反方向移动无效

    ² 除了程序控制键之外的其他按键不会影响贪吃蛇

    ² 移动贪吃蛇时不会造成屏幕闪烁BUG

    4.7. 贪吃蛇生命模块:

    ² 当蛇吃到自己身体或者触碰围墙时蛇死亡

    4.8. 获取贪吃蛇速度模块:

    ² 根据蛇的身体长度来设置速度等级

    ² 当身体长度足够长时则通关游戏

     

    4.9. 移动光标模块:

    ² 获取输出流窗口句柄

    ² 定义使用存储坐标结构体

    ² 将坐标与窗口句柄传入函数实现移动光标

     

    4.10. 帮助系统模块:

    ² 提示玩家一些按键控制和游戏规则

     

    4.11. 退出系统模块:

    ² 游戏通关或游戏结束时给予退出或重玩选择

     

    5. 详细设计

    1. 思想:一条蛇可以看成由许多正方形的“小格子”拼凑成,称作节。节是蛇身上最小的单位。通过移动窗口光标来打印蛇。
    2. 参考资料:《徐飞机博客园》,网上资料,《c语言程序设计》,《windows程序设计》
    3. 基本设计理念:程序关键在于表示蛇的图形及蛇的移动。用一个@字符表示蛇的一节身体,身体每长一节,在身体最后增加一个@。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是吃到食物就在下一个坐标信息加一个@ 没吃到食物就将尾巴置空,蛇头前在加一个@,蛇的XY数组长度为保存蛇每个节点信息食物的出现是先确定一组随机数,再填充方格,食物的消失是由于被蛇身体覆盖,当吃掉食物后就不再重画本次食物,而是生成一组新的随机数,画新的食物当蛇头的位置坐标和围墙的坐标或者自己身体的某个节点的坐标相同时,蛇就死掉了,游戏结束。
    4. 代码模块示意:

    //Initialization map

    void initMap(void);

     

    //updataFood

    void updataFood(void);

     

    //moveSnake

    void moveSnake(void);

     

    //Judge whether the snake is alive or not

    int isAlive(void);

     

    //get snake speed

    void getSpeed(void);

     

    //move cursor

    void gotoxy(int x, int y);

     

    //Right interface

    void printFont(int x, int y, int speed);

     

    //menu

    int menu();

    5.1. 各功能模块的具体实现算法——流程图

    5.1.1. 主控main函数流程图

     

     

     

    2 主控main函数流程图

    5.2. 重点设计描述

    Gotoxy();函数来实现打印贪吃蛇整个程序的光标移动,在里面我们首先获取到输出流缓冲区的窗口句柄,然后在根据结构体存储X,Y坐标信息来实现整个窗口的光标移动

      控制蛇的移动模块moveSnake();这里在下根据grow值来判断是否吃到食物,并实现打印贪吃蛇的移动,贪吃蛇的移动只打印头部和尾部,这样防止了每次刷新页面造成的闪烁。当grow为0的时候代表没有吃到食物,先移动光标到蛇尾将蛇尾置空,然后根据位置信息在蛇头前加一个节点@,代表这个蛇往前移动了一个节点单位。当grow为1时则不对尾部进行操作,直接根据XY数组信息进行添加一个@节点代表蛇的移动。

    另外在移动蛇里我加了一些判断限制,避免了除系统指定按键之外按键的干扰导致程序提前终止,也加了一些过滤判断,比如当蛇向上移动时,不能直接向下移动。

    当按空格键的时候可以实现贪吃蛇游戏的暂停和继续。

     

    6. 系统测试与调试

    在调试贪吃蛇的过程中主要出现以下几个BUG

    第一:一开始调试时连续快速的按某个方向键会使程序崩溃(原因是程序内部没有进行过滤操作),此问题已经解决。

    第二:当贪吃蛇向上移动时,按下方向键程序奔溃游戏结束(原因是无过滤操作),此问题已解决。

    第三:贪吃蛇在移动的时候窗口会不断闪烁,影响游戏体验(原因是每次都打印一条蛇,导致整个窗口刷新),此问题已解决。

    第四:有时蛇的长度会自己增加(原因食物出现与身体重合),此问题已经解决。

    第五:主main函数文件调用其他文件变量时无法调用(原因没有用extern进行转置跨文件调用)

    7. 课程设计心得体会

    通过这次课程设计,我对c语言又有了更深刻的认识。也有了更深一步的喜爱,决定一定要努力学好c语言,并能更好的应用于以后的学习工作中。 
    这次贪吃蛇的设计,做的不是很完美,也没想象中的那么好,但也获得了许多宝贵的经验:

    1) 在设计程序之前,务必要对自己所要设计的题目和内容有一个系统的,大概的了解,知道所设计的题目和内容包含哪些资源。 
    2) 设计程序采用什么编程语言并不是非常重要,关键是要有一个清晰的思路和一个完整的软件流程图,所有要先把设计原理与思路搞清楚,再把流程图画出来,这样设计起来就简单多了。

     

    参考资料

    [1] Windows程序设计

    [2] c语言程序设计

     

     

    转载于:https://www.cnblogs.com/DOMLX/p/8846529.html

    展开全文
  • C语言课程设计报告-菜单设计

    万次阅读 多人点赞 2019-07-02 18:55:03
    源代码:https://blog.csdn.net/queen00000/article/details/94468911 xxx大学 C语言课程设计报告 ...

     

     

     

    源代码:https://blog.csdn.net/queen00000/article/details/94468911

     

     

                                        xxx大学

     

                                     C语言课程设计报告

     

     

                                                      题    目            菜单设计                

                                                      专业班级                                        

                                                       组    别                                          

                                                       学生姓名                                        

                                                       院 (系)                                       

                                                       指导教师(职称)                          

                                                       完成时间                                        

     

     

     

                                         课程设计任务书

     

     

                                                         题目               菜单设计                       

                                                         班级                                                      

                                                         学号                           姓名                                       

                                                         学号                           姓名                    

                                                         学号                           姓名                    

     

     

     

    • 主要内容:

    本课程设计结合本学期所学C语言知识,数组、函数、结构体、指针、链表、文件读取操作等等,准备设计开发一个简单的图书管理系统。设计开发这个系统需要用到链表、文件读取操作、结构体、函数、指针、等C语言知识。本课程设计将会实现对菜单的定义、菜单的显示、菜单选项的控制、及退出菜单等功能。本着简单、易用的设计原则,本课程设计在尽量优化界面在保证输入输出美观的同时又不失友好的交互界面。

    本次设计主要学习内容包括:

    (一)进一步学习并熟练掌握C语言语法和编程思想。

    (二)学习C语言提供的库函数,熟悉CodeBlocks的开发工具。

    (三)学习C语言函数、链表、结构体、文件读取、指针等知识。

    (四)学习软件的设计与开发过程中所需要思想和细节。

    二、基本要求:

    (一)质量要求

    (1)菜单的基本功能模块的设计应包括:显示菜单、定义菜单、画出菜单、菜单选项的控制和退出菜单。

    (2)菜单设计并进行调试、修复、完善、测试。测试主菜单和下拉菜单是否正确、测试信息的读取与存储是否正常、测试退出菜单后是否各项功能是否正常运行、测试评估界面是否合理,友好。

    (3)定期主动向指导教师汇报任务进度,认真填写相关报告文档。

    (4)按时完成各阶段工作,不突击,不抄袭。

    (二)进度要求

    (2)明确课程设计任务,搜集资料:2018年3月16日—3月30日。

    (3)完成程序的设计与实现,撰写课程设计论文初稿:2018年3月31日—5月31日。

    (4)与指导教师沟通,完成课程设计论文定稿:2018年6月1日—2017年6月8日。

    (5)进入课程设计论文审阅阶段,准备答辩:2018年6月9日—6月22日。

     

    三、主要参考资料:

    [1] 甘勇,李晔,卢冰.中国铁道出版.《C语言程序设计(第二版) 》  

    [2] 河南工业大学同学的图书管理系统的功能的借鉴。

    [3] 啊哈磊.人民邮电出版社.《啊哈!算法》

    [4] 程杰,清华大学出版社.《大话数据结构》

     

     

                                                                                      完 成 期 限:                         

                                                                                     指导教师签名:

     

                                                                                                                       年   月   日

     

     

     

                                                              目录

    1.1 设计思想 .............................................................................................................................2

    1.2 设计原则 .............................................................................................................................2

    1.3 课程设计报告内容及分工情况 .............................................................................................3

    1.3.1 课程设计报告内容 ............................................................................................................3

    1.3.2 课程设计分工情况 ............................................................................................................3

    2总体设计 ..................................................................................................................................4

    2.1 功能模块图 ...........................................................................................................................4

    2.2 主函数 main() .......................................................................................................................4

    3 详细设计 ...................................................................................................................................6

    4运行结果与调试 .........................................................................................................................15

    4.1运行结果: .............................................................................................................................15

    4-2软件调试 .................................................................................................................................17

    结束语 .........................................................................................................................................18

    参考资料 ......................................................................................................................................19

     

    1概述

    1.1 设计思想

        (1)该系统的设计分成几个相对独立的模块,这些模块都进行集中式管理。

        (2)分层的模块化程序设计思想,整个系统采用模块化结构设计作为应用程序,有较强的可操作性和扩展性。

        (3)合理的数据设计,在应用系统设计中,相对独立的模块间以数据相互连接,使各模块间的耦合性较低,方便系统运行,提高系统安全性 。

    1.2 设计原则

    为了使本系统功能齐全完备,操作简便,最大限度的提高用户的使用的体验,从而满足用户的实 际需要,在设计开发过程中遵循了如下原则:

         (1)合法性原则:规范录入各种学生信息和各种数据,对用户的账号信息进行规范保存。

         (2)实用性原则:根据用户对菜单信息浏览和登陆和查询的基本需求设计各种功能,并能够处理一些特殊情况的要求,此外,尽可能预留空间,以便扩充功能。

         (3)易操作原则:要求设计的系统功能齐全,界面友好,操作方便,必要的地方进行提示。

         (4)源程序可读性原则:为了便于其他设计,维护人员读懂代码或以后的代码修改,软件升级维护, 即可能做好代码注释工作。

     

    1.3 课程设计报告内容及分工情况

    1.3.1 课程设计报告内容

        (1)系统功能模块结构图

        (2)数据结构设计及用法说明

        (3)程序结构(画功能模块图或流程图)

        (4)各模块的功能

        (5)实验结果(包括输入数据和输出结果)

        (6)设计体会

        (7)参考文献

     

    1.3.2 课程设计分工情况

    本组共有3人,具体分工情况如下:

              (1)学号:   ,姓名:    ,具体负责写全部代码和功能实现并完成大部分课程设计报告。

              (2)学号:   ,姓名:   ,具体负责流程图的制作。

              (3)学号:   ,姓名:   ,具体负责流程图的制作。

     

     

     

    2 总体设计

    2.1 功能模块图

    本学生成绩管理菜单系统分为九个功能模块,分别是录入,删除,查找,修改,增加,排序,统计,存盘功能。功能模块图如图2-1所示。

    2.2 主函数 main()

    函数的功能:用于联系各个功能函数模块,以及退出程序时的退出画面提示。

    函数的入口:整个程序是从主函数开始的。

     函数的出口:当从main()的ove函数开始中进入,即显示出欢迎使用界面; 跳出while循环,然后退出main()函数,即:退出整个程序。

    函数调用关系:该函数不被其它函数调用。

     

     

                                                                            图2.1学生成绩管理菜单系统模块图

     

    3 详细设计

     

    3.1 函数

       (1)函数void ShowMenu( )

     调用dos命令cls清屏,然后直接用printf语句输出界面即可。C语言中system函数可以执行DOS命令。

     

       (2)函数void PrintTitle( )

     用printf语句输出表头“学号 姓名 语文 数学 英语 C语言 总分 平均名次” 中,在程序中要注意表头和具体的数据对其。

     

      (3)函数PrintData(Node *p)

    将p指定的结构体信息输出,具体的数据项应该和PrintTitle( )函数中输出的数据项对其。

     

      (4)函数Node* Locate(Link list,char findstring[],char nameornum[] )

     nameornum中只能存放“num”或“name”,当存放的是“num”时则按学号查找,当存放的是“name”时则按姓名查找。

     

        (5)函数void StringInput(char *t, int lens, char *msg) 

    输入字符串时进行长度验证,如果不符合要求则提示信息msg后让用户再次输入。在函数内部定义一个临时缓冲区char str[16],接收用户输入,当输入的字符串长度大于lens时,则再次要求用户输入,并给出提示信息。

        (6)函数int NumberIput(char *msg)

    要求输入某一范围内的数字,其算法思想和StringIput( )函数类似。

     

        (7)函数void DisplayAll(Link list)

    该函数显示链表中,所有学生的信息。先输出表头,然后输出链表中学生的数据即可。

       (8)函数void AddStudent(Link lidt)

    该函数用于输入学生信息,先将指针移动到链表的末尾,新加入的学生信息放在链表的末尾。因为系统中不会有两个相同学好的学生,录入数据时,首先判断输入的学号是否已经存在,如果用户录入了已经存在的学号,则给用户提示重新录入。学号正常后,则申请节点空间,录入其他数据项,再将该节点加入的链表的末尾。

     

       (9)函数void Insert(Link list)

    该函数在某一特定学号之后插入一个学生的信息。

    (10)函数void Query(Link list)

    该函数是先按学号或按姓名查找。根据用户的输入确定按什么查找,在这里调用前面已定义的locat( )函数即可实现查询,然后将查询到的结果显示出来。

     (11)函数void Delete(Link list)

    该函数实现按学号或者按姓名删除某个节点。根据用户的输入确定按什么进行删除。

     (12)函数void Modify(Link list)

    该函数用来修改某个学生的信息,注意学号不能被修改。

     (13)函数void Statistic(Link list)

    该函数显示该班的总分第一和单科第一的人,统计各科不及格人数。

       (14)函数void Sort(Link list)

    该函数实现将链表中的节点按总分从高到低排序。本项目使用插入排序的方法,从本质上来看,链表的排序和数组的排序思想相同,但程序表达比数组稍微复杂。

      (15)函数viod Save(Linl list)

    该函数实现将链表中的节点按顺序保存到文件。每一个学生的数据是一个结构体,不同学生的数据在内存中的大小是相同的,用sizeof(Node)可以计算出来。

     

     

     

    3.2函数流程图

    (1)Locate函数主流程

     

     

     

    (2)定位节点的算法

     

     

    (3)StringInput函数算法

     

     

    (4)DisplayAll函数算法

     

    (5)AddStudent算法

     

     

    (6)Query算法

    4运行结果与调试

    4.1运行结果:

     

    1. 在程序开始的时候,是登陆界面。该界面可以进行添加学生信息、浏览学生信息、查询学生信息、修改学生信息、删除学生信息等。界面如图4-1所示。

                                                                                                   4-1

     

    (2)输入1,就会弹出添加信息界面,根据提示信息,进行完善即可。如图4-2所示。

                                                                                                 4-2

     

    (3)在存入信息的基础上,选择2,即浏览学生信息,即出现自己所添加的页面,如图4-3所示。

                                                                                                 4-3

     

     

     

    4.2软件调试

    (1) 每个选择界面之后,前一屏幕的内容依旧存在,影响界面的美观;经过老会长的帮助及上网搜索,发现利用“system(“cls”);”可以消去前一屏幕的内容;然而接下来又出现新的问题:每次在执行完讲数据保存到文件的函数后都会输出紊乱。经过多次调试和修改后,发现把是因为freopen(”CON”,stdout)运行不稳定导致,在更换了保存数据的方法后结决了此问题。

    (2) 在增加了切换账号功能后,在创建新账号后保存到文件的用户借还书记录总是出错但内存中没错,经过调试发现是因为在新增账号时用于存储新账号借还书记录的指针名与一个变量名相同造成每次都判断错误。最后更换了变量名,并使该指针每次使用前都指向NULL。

     

    (3)最开始在每次关闭程序后在下次使用前需要手动恢复文件中的数据,不能连续的使用数据,最后加了一个文件来保存各类数据的数量以使数据能够连续自主的调用,不需要再人工修改。

     

     

     

     

    结束语

    本系统包含了很多函数,实现了学生成绩管理菜单系统所需的基本功能。系统主要包含了九个模块,分别是添加学生信息、浏览学生信息、查询学生信息、修改学生信息、删除学生信息、排列学生信息、读取文件学生、保存到文件、退出系统。

    xxx:在该设计中主要完成了所有代码的实现,并最终调试实现了该学生成绩管理系统的全部功能并完成了大部分的设计报告。在设计的过程中熟练了对文件的各种操作,链表和结构数组的使用,清屏函数和暂停函数的使用,对做一个项目的过程有了一个大概的认识,知道了大致的规划。在设计过程中发现一些文件的操作和清屏函数会有冲突,通过改变对文件的操作解决了此问题。

     

    xxx:除了xxx设计的这个学生成绩管理系统,我自己也尝试着设计了一个学生成绩管理系统的功能,因此也发现了很多问题,比如说:在用add()函数添加新增学生信息时,我就忘了字符型数据本身会吃掉回车的这一特点,忘了在%c前面加上空格,导致程序在循环的过程中一直无法正常显示结果。但是,通过仔细耐心的检查与对错误的分析,又在课本的相关章节进行了查阅,最终发现了这一问题。同时,我更加熟悉了结构体的使用,对函数的调用方式更加清楚。还有就是初步了解了函数指针的概念,能够使用基础的函数指针。同时,这也是我第一次尝试画各种各样的流程图,虽然画的不好,但这确实是我的第一次尝试,也觉得充满了乐趣。

     

    xxx:在本系统的设计中我参加设计了少量函数语句以及制作流程图等任务,在这次的设计前我原本对函数和结构体等了解并不太清楚,通过这次的设计我清楚了这些语句的运用,并且我学会了文件的操作,在文件的修改等地方出现了问题,后来通过查阅资料和讨论解决了这个问题。

     

     

    参考资料

     

    [1] C语言程序设计(第二版)》,甘勇等编著,中国铁道出版社,20159月

    [2] 《C语言程序设计》,苏小红等主编,高等教育出版社,2011年

    [3] 《C和指针》,徐波译,人民邮电出版社,2008年

    [4] 《C Primer Plus 第6版 中文版》,姜佑 译,人民邮电出版社,2016年

    [5] 《大话数据结构》,程杰,清华大学出版社,2011年6月

    [6] 《啊哈!算法》,啊哈磊,人民邮电出版社

    展开全文
  • c语言课程设计报告 会员卡计费系统源代码,c语言课程设计报告 会员卡计费系统源
  • C语言课程设计
  • c语言课程设计报告 企业员工管理系统
  • c语言课程设计报告书万年历

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,382
精华内容 552
关键字:

c语言课程设计报告

c语言 订阅