qq_53766594
qq_53766594
采纳率0%
2021-01-13 02:25 阅读 58

c语言课程设计 数组or链表 1月13日22点前

100

C课程设计 题目:学生公共选修课管理系统 一、 功能需求说明(必须采用结构体和动态链表实现) (1)用户登录与主界面模块。负责用户登录窗口的生成、用户名以及用户密码的输入与确认。 (2)输入模块。涉及课程信息(包括开课学院,开课教师工号及姓名,开课课程名,课程学分,考试形式)、学生信息的输入(学生所在院系,学生学号,学生姓名,学生性别,年级)。 (3)查询模块。实现按学号查询、按课程查询、按选课学生所在院系查询 (4)更新模块。主要实现记录的修改、删除和排序操作。 (5)统计模块。查询完成选课的课程信息以及未成功开课的课程信息,查询每门课的选课人数。(若选课人数没有达到50人,则不能开课) (6)选课模块。每个学生每学期选课不能超过3门。可以统计每个学生所选课程的总学分。 (7)可以根据实际情况做功能扩充 二、加分项 (1)使用图形界面。 (4) 使用线、图表示查询记录和统计信息 (3)可参考实际情况对软件进行功能扩充。 三、设计要求 1、不同的模块都要有出错处理,并能给提示。如输入数据错误,文件操作错误等。 2、以上各个功能均编写成子函数,有良好的注释说明,由主函数调用实现。 3、必须采用结构体数组或链表结构进行存储和管理; 4、必须使用文件保存数据 5、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观 要求!!!: 1.只能使用 C 语言,工具采用 TC2.0 或 3.0,源程序要有适当的 注释,使程序容易阅读,所有程序要求使用多文件多函数编程方式。 2.要有用户界面。要求至少采用文本菜单界面;鼓励采用图形菜 单界面,使用文件保存数据,鼓励自行增加新功能。 3.写课程设计报告(要求正规打印,A4 幅面,双面打印),内容 包括:  封面(以附件格式为主)  课程设计题目、内容、要求。  总体设计(包含几大功能模块),画出系统功能模块结构图  详细设计(各功能模块的具体实现,画出相关流程图)  公用数据结构设计及用法说明  各函数模块的功能介绍,程序结构(画流程图),数据结构设 计描述,参数说明等。(画流程图推荐使用 Microsoft Visio 工具)  试验结果(包括输入数据和输出结果)  体会,总结(课程设计完成了哪些功能,有什么扩展功能 有 什么地方需要改进,通过课程设计有何收获,调试程序的体会等)  参考文献

  • 点赞
  • 收藏
  • 复制链接分享

10条回答 默认 最新

  • zqbnqsdsmd zqbnqsdsmd 2021-01-13 10:00

    数组的长度是固定的,但是链表可以任意一个长度

    点赞 1 评论 复制链接分享
  • m0_50984266 尚乐大哥 2021-01-15 17:13

    推荐使用链表,链表的应用,将结构体涵盖其中,结构体的定义和应用,是C语言程序设计的升华。

    通过链表,可以很容易实现节点的增加和删除,不需要像数组一样,逐个遍历之后还有移动前后元素。

    当然,数组的随机查询是非常方便的,这是牺牲了内存空间的,数组的定义必须是一个完整的连续空间,而链表中节点可以是离散分布,不需要连续分布。对于一个系统来说,存储的数据量非比较大,使用链表的话,更合适。

    点赞 1 评论 复制链接分享
  • zqbnqsdsmd zqbnqsdsmd 2021-01-13 10:00

    所以你可以采用很多相关的技术,来灵活的运用

    点赞 评论 复制链接分享
  • zqbnqsdsmd zqbnqsdsmd 2021-01-13 10:00

    不一定说链表就比数组要好,这是程序中特殊的情况造成的

    点赞 评论 复制链接分享
  • zqbnqsdsmd zqbnqsdsmd 2021-01-13 10:01

    但是你最好还是两个办法都事先下

    点赞 评论 复制链接分享
  • zqbnqsdsmd zqbnqsdsmd 2021-01-13 10:01

    实现了这样的功能,程序的完备性可以得到提高

    点赞 评论 复制链接分享
  • zqbnqsdsmd zqbnqsdsmd 2021-01-13 10:01

    一般来说数组我们可以使用变量来定义的

    点赞 评论 复制链接分享
  • zqbnqsdsmd zqbnqsdsmd 2021-01-13 10:01

    而结构体的定义就可以借助链表了

    点赞 评论 复制链接分享
  • u011344545 冲动的MJ<卡尔曼的鱼> 2021-01-15 18:53

    #include<stdio.h>

    #include<windows.h>

    #include<stdlib.h>

    #include<conio.h>

      

    typedef unsigned char uint8_t;

    typedef unsigned short uint16_t;

    typedef unsigned int  uint32_t;

      

    #define CLASS_CLS  system("cls")

    #define CLASS_NAME  80

      

    typedef struct class

     {

      char name[CLASS_NAME]; /* 课程名称 -- 唯一性 */

      uint32_t nature;    /* 课程性质(必修或者选修) */

      uint32_t total_period; /* 课程总学时 */

      uint32_t teach_period; /* 授课学时 */

      uint32_t exper_period; /* 上机学时 */

      uint32_t start_time;  /* 课程开始时间 */

      uint8_t score;     /* 课程学分 */

      uint8_t is_exsit;    /* 课程是否存在 */

      struct class *next;

     } class_t; // 课程结构体

      

    class_t *head = NULL;

    static uint32_t count = 1;

      

    void play(char *text, int display, int time, int nu) //动画打印

    {

     CLASS_CLS;

     int i, len;

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

     {

      printf("\n");

     }

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

     {

      printf(" ");

     }

     len = strlen(text);

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

     {

      printf("%c", text[i]);

      Sleep(display);

     }

     Sleep(time);

    }

      

    void titile(char *text, char *str)

    {

     CLASS_CLS;

     uint8_t i;

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

     {

      printf(" ");

     }

     printf("%s\n", text);

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

     {

      printf("%s", str);

     }

     printf("\n");

    }

      

    void menu(void)

    {

     titile("【学生选课系统】", "-");

     printf("\n\t|-----------------------------------|");

     printf("\n\t|      [1]--增加课程     |");

     printf("\n\t|      [2]--浏览课程     |");

     printf("\n\t|      [3]--查询课程     |");

     printf("\n\t|      [4]--删除课程     |");

     printf("\n\t|      [5]--修改课程     |");

     printf("\n\t|      [Q]--退出系统     |");

     printf("\n\t|-----------------------------------|");

    }

      

    void get_bat_data(void)

    {

     class_t *point, *q;

     uint32_t count = 0;

     FILE *fp = fopen("c:\\student_elective.dat", "rb");

     rewind(fp);

      

     point = (class_t *)malloc(sizeof(class_t));

     head = point;

      

     while(!feof(fp))

     {

      count++;

      fread(point, sizeof(class_t), 1, fp);

      point->next = (class_t *)malloc(sizeof(class_t));

      q = point;

      point = point->next;

     }

     q->next = NULL;

     fclose(fp);

    }

      

    void save_bat_data(void)

    {

     class_t *point = head;

     FILE *fp = fopen("c:\\student_elective.dat", "w+");

      

     while(NULL != point)

     {

      count++;

      fwrite(point, sizeof(class_t), 1, fp);

      point = point->next;

     }

     fclose(fp);

    }

      

    uint32_t num_check(void)

    {

     char ch;

     uint32_t sum = 0;

      

     while(1)

     {

      ch = getch();

      if('\n' == ch || '\r' == ch)

      {

       return sum;

      }

      else if('\b' == ch)

      {

       sum /= 10;

       printf("\b \b");

      }

      else if(('0' <= ch) && ('9' >= ch))

      {

       sum *= 10;

       sum += ch - '0';

       printf("%d", ch - '0');

      }

     }

      

    }

      

    void create(void)

    {

     class_t *point, *q;

     char tmp[CLASS_NAME], ch;

     uint8_t flag = 0;

      

     while(1)

     {

      if(1 != count)

      {

       printf("是否继续增加课程(y/n):");

       gets(tmp);

       if(strcmp(tmp, "n") == 0)

       {

        break;

       }

      }

      

      point = (class_t *)malloc(sizeof(class_t));

      point->is_exsit = 0;

      printf("\n====请输入第%d个选修课程信息====\n", count);

      printf("选择课程名称:");

      gets(point->name);

      q = head;

      while(NULL != q)

      {

       if(strcmp(q->name, point->name) == 0)

       {

        flag = 1;

        printf("课程名称重复或者不合格,请重新输入...\n");

        break;

       }

       q = q->next;

      }

      if(1 == flag)

      {

       continue;

      }

      

      printf("课程性质:");

      printf("\n[B]--【必修】 [X]--【选修】");

      while(1)

      {

       ch = getch();

       if(ch == 'b' || ch == 'B')

       {

        point->nature = 1;

        break;

       }

       if(ch == 'x' || ch == 'X')

       {

        point->nature = 2;

        break;

       }

      }

      

      printf("\n输入总学时:(只接受数字!)");

      point->total_period = num_check();

      printf("\n输入授课学时:(只接受数字!)");

      point->teach_period = num_check();

      printf("\n输入上机学时:(只接受数字!)");

      point->exper_period = num_check();

      printf("\n输入本课程学分:(只接受数字!)");

      point->score = num_check();

      printf("\n输入开课学期:(只接受数字!)");

      point->start_time = num_check();

      point->is_exsit = 1;

      

      point->next = head;

      head = point;

      count++; 

     }

      

     printf("信息录入完毕,按任意键继续……");

     getch();

    }

      

    void display(void)

    {

     class_t *point = head;

      

     CLASS_CLS;

     titile("【查看课程】", "-");

     printf("\n名称      \t性质\t总学时\t授课学时\t上机学时\t学分\t开课学期");

      

     while(NULL != point)

     {

      if(1 == point->is_exsit)

      {

       printf("\n%-14s  ", point->name);

       if(1 == point->nature)

       {

        printf("必修课");

       }

       else

       {

        printf("选修课");

       }

       printf("   %d时   %d时      %d时      %d分   %d时", point->total_period, point->teach_period, point->exper_period, point->score, point->start_time);

      }

      point = point->next;

     }

     getch();

    }

    // 对照学生管理系统自行拓展

    void search(void)

    {

      

    }

      

    void modify(void)

    {

      

    }

      

    void delete(void)

    {

      

    }

      

    int main(void)

    {

     uint8_t value;

     uint8_t movie = 1;

     char choice[3];

      

     FILE *fp = fopen("c:\\student_elective.dat", "a");

     fclose(fp);

      

     system("color 30");

     system("mode con:cols=100 lines=35");

     system("title 【选修课系统】");

      

     if(1 == movie)

     {

      play("欢迎使用【选修课系统】", 80, 1500, 10);

     }

      

     while(1)

     {

      CLASS_CLS;

      menu();

      do

      {

       gets(choice);

       value = atoi(choice);

      }

      while((value > 12) || (value < 0));

      switch(value)

      {

      case 1:

       create();

       break;

      case 2:

       display();

       break;

      case 3:

       search();

       break;

      case 4:

       modify();

       break;

      case 5:

       delete();

       break;

      case 6:

       save_bat_data();

       break;

      case 7:

       get_bat_data();

       break;

      case 8:

       exit(1);

       break;

      

      default:

       break;

      }

     }

      

     return 0;

    }

    点赞 评论 复制链接分享
  • qq_43532604 Decade ming 2021-01-16 10:26

    楼上大哥说的很对,在存储对象长度未知的情况下使用链表是最合适的,插入与删除都比较方便,数组一旦确定长度就无法进行插入与删除。课设设计自己做一下对C语言的学习有很大长进。

    点赞 评论 复制链接分享

相关推荐