C语言课程设计文件版,C语言课程设计

C语言课程设计

通过一段时间的C语言的学习,花了一段时间写出了这次课程设计。。

主要也就是对链表的简单使用。

在这里我说下我写的思路。

因为是个小菜鸡,所以有很多地方可能有错误的理解,望多多包涵。。。。

这就是我写的全部功能:

1.显示菜单:

6951a887415f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

6951a887415f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

也就是这样,每一个选项对应一个小的功能,上面的system("cls")添加是为了美观,列表中一个个的功能下边会一一以函数的方式实现。

2.获取功能的选择(用以实现功能):

6951a887415f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

6951a887415f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

因为只写了九个功能,所以规定了1-9的范围。

6951a887415f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

下图为输入num的值,用了简单的switch-case函数接收前面返回的num的值,也就是通过选择来实现main函数里边的这九个对应的函数功能。

3.创建链表,并创建节点:

6951a887415f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

6951a887415f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

这里用的最简单的方法创建了链表,创建结构体与结构体指针,常规的malloc申请空间,113行创建一个节点返回一个指针(并通过不断的输入各种需要的信息,具体过程也就不再多提。),用来保存一个个的学生信息,先令指针域指向空,然后通过一直next向下不断进行,最后把带着输入的数据节点的指针全部返回出来。

4.实现功能:

(1)新增学生信息:

6951a887415f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

上边创建好像把这个功能给说出来了。。。。。。。在这也就不再多提了,,,,直接进去下一个环节了。。。。嗯,就这样!

(2)删除学生信息:

因为我写的是通过输入编号来删除学生信息,通过所添加节点的num的值,找到所对应的节点以达到删除此节点的功能。

所以我们的 首要目的就是要寻找该节点所被赋予的num的值,通过把pstu->next 一步一步寻找与其相对应的num的值。

6951a887415f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

因为这里寻找的是pstu->next的节点,所以这个功能返回的是上一个节点所对应的指针,之后就可以通过所找到的pstu->next的num的值实现对对应节点的操作了。

下面是执行删除的功能的函数:

6951a887415f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

链表的删除的实现是比较简单的,定义一个中间量,我这里用的是ptmp,并把pstu->next的指针指向它,此时的ptmp就是我们想要删除的节点了,再令pstu=ptmp->next,也就是pstu->next->next,之后free(ptmp),释放掉,就实现了删除功能。

(3)学生排序:

6951a887415f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

6951a887415f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

因为是排序也就涉及到每个学生,所以要从头到尾都要比较一遍,所以我就定义上图的ps为头结点,且pstu=ps->next,直到pstu->next=NULL,一直往下进行,也就实现了全部都比较了一遍的效果。

之后通过for循环一个个的比较,选出s1+s2之和最大的排在前面(就是通过简单的总成绩大小比较,交换各个数值,姓名等的数据,用到了简单的strcpy实现交换的功能,以达到比较的目的),之后我又int 了一个t,随着for循环的进行不断增大,从而得出第几名。

虽然原理很简单但是在这个功能上也是浪费了不少时间。。。。

(4)信息搜索(按学号):

上面已经有编号的获取了,这里可以通过调用直接实现了;

6951a887415f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

同样因为是上一个节点的指针,所以这里王某人用的都是pstu->next所对应的各种值,当输入的num的值跟节点所对应的num值相等时,然后通过简单的输出,也就把姓名跟总分显示出来。。

(5)显示全部信息:

这个功能我感觉还是比较简单的,从头到尾的输出一遍就是了。

6951a887415f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

也就是从头结点开始,一步一下往下推,令pstu为头结点,一步步执行pstu->next获取下一节点,并把节点对应的数据输出出来,但是这里的平均分我定义的只能整形并不能出现小数。。

(6)修改学生信息

要判断同样也要获取节点的编号,如果没有添加过这个编号,就输出未找到,如果找到,则进入修改。

6951a887415f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

找到了这个节点,直接重新输入这个节点的各个值,也就对该节点的各个值进行了修改。(请把232的choose给忽略一下。。。)

(7):保存 信息到文件:

6951a887415f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

首先定义一个保存学生信息的文件的名字,这里我写的是保存的学生信息。

6951a887415f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

这里先通过头结点往下找一共添加了几个学生的信息,然后返回出来,下边会用到。

6951a887415f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

首先通过w+打开一个文本文件,然后定义pstu为头结点,通过pstu->next把信息都浏览出来,两次fwrite分别将学生信息数量跟学生信息写入进去,然后fclose关闭,达到保存的目的。

(8)学生信息读取:

6951a887415f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

首先fopen打开一下上个功能保存的文本文件,通过一个for循环一直向下读取,最后通过定义的pstu指针返回到节点,实现读取功能。

(9)退出:

这个功能直接 switch-case中实现了:

6951a887415f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

choose等于0,直接就break,也就跳出了while循环,也就实现了退出的功能。

这次课程设计写出来还是有点困难的,也看了好多书,也参考的好多百度代码,也没少麻烦学长,但最终还是写出来了,虽然写的过程中没少有挣扎,但是每实现一个功能实现出来也是感觉很欣慰,最终的努力也没有白费。

最后在这里我想所有对我提供帮助的哥哥姐姐们表示最真心的感谢。。。。。

3q very much。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值