鱼C论坛

 找回密码
 立即注册
查看: 21704|回复: 35

[技术交流] C语言简单学生成绩管理系统-链表实现-附源码

[复制链接]
发表于 2014-12-28 20:08:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 蔚蓝 于 2014-12-28 22:53 编辑

#include <stdio.h>//标准输入输出
#include <malloc.h>//内存分配
#include <stdlib.h>
#include <string.h>
/*####说明####
简单学生管理系统      蔚蓝之链编写   QQ:2454238510
本人是C语言初学者,初学C语言没几个月,程序写的"很笨",不喜勿喷^_^  
vc++6.0编译无error,无warning
已实现功能:添加学生,列出学生信息列表,删除学生,退出,学号重复检查,排序功能,
多科成绩录入(求平均成绩,及总平均成绩),保存记录,读取记录,修改功能;
待实现功能:查询......
//常量定义区+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define bool int //由于C语言中不存在bool型,所以这里把它定义成int型
#define true 1   //同上
#define false 0  //↑
#define LEN sizeof(struct ryb)   //动态内存分配空间大小
#define DATAFILE "DATAFILE.WL"//数据保存文件名
#define MAX_SCORE 150  //最高分数上限值
#define MAX_SNO 200     //最多录入学生上限值,即能输入的最大学号数
//END常量定义============================================================================================================

//声明函数=================================================================================================================
struct ryb * del_item_ryb (struct ryb * head,int sno,int * del_message);//删除指定学号节点(链表头,欲删除学号,处理结果(1为删除成功,0为删除失败)),返回删除后的链表头
struct ryb * create_item_ryb (struct ryb * head);//向指定的链表添加学生,并返回链表头
void put_ryb (struct ryb * head);//输出学号及成绩(欲输出链表头)
bool is_sno(struct ryb * head, int sno );//判断指定学号是否存在,如存在返回true,不存在返回false(链表头,欲判断学号)
struct ryb * order(struct ryb * head, enum ordertype type, int fs );//排序函数;(链表头,排序方式(asc或desc),排序类型(1为按学号,2为按总成绩))
bool save_data(struct ryb * head);//保存链表数据函数(欲保存链表头)
struct ryb * read_data(void);//读取数据到链表,并返回链表头
void clear(struct ryb * head);//清除函数,清除指定链表所有数据,释放内存空间
void amend_ryb(struct ryb * head, int sno);//修改函数,修改指定学号学生成绩信息(链表头,要修改成绩的学生学号)

struct ryb {     //定义链表数据结构
        int sno;           //学号
        char name[9];     //姓名
        int chinese;      //语文
        int math;          //数学
        int english;       //英语
        int clanguage;      //C语言
        int tiyu;           //体育
        int score;           //总成绩
        struct ryb *next;
};

enum ordertype{//定义排序枚举类型
asc,desc
};

//性感的分割线$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$主程序$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
int main ( void )
{
        struct ryb * head,* temp_h;//链表头,临时链表
        bool exit = false;
        short int value;//接受输入信息1,2,3,4       1表示添加信息,2显示信息,3删除信息,4排序,5退出
        int sno, del_message = 0;//学号,删除函数处理结果(1为删除成功,0为删除失败)
        int pxfs,pxlx;//排序方式,排序类型(方式asc\desc);(类型 1学号,2成绩)
        char is_quit;//表示是否退出,y或Y表示退出,否则不退出
        char is_save;//表示是否保存数据,y或Y表示保存,否则不保存
        char is_read;//表示是否读取数据,y或Y表示读取,否则不读取
        bool ssave;//表示是否保存成功,true表示成功,false表示保存失败
        int amend_sno; //表示要修改的学号
        head = (struct ryb *) malloc(LEN);//创建初始链表
        head->sno =0;//链表赋初值
        head->next = NULL;
        do
        {
        printf("蔚蓝学生管理系统v1.5(C语言版)QQ:2454238510\n\n");
        printf("①添加学生\n②显示成绩列表\n③删除学生\n④排序\n⑤保存数据\n⑥读取数据\n⑦修改\n⑧退出系统\n\n");
        printf("等待命令输入:");
        fflush(stdin);//清空键盘缓冲区
        scanf("%d",&value);
        if(value  == 1)//添加
        {
                head = create_item_ryb(head);//添加信息
                printf("录入信息结束!\n");
                system("pause");
        }else if (value == 2)//显示
        {
                put_ryb(head);      //显示信息
                system("pause");
        }else if(value == 3)//删除
        {
                printf("请输入要删除的学生学号:");
                fflush(stdin);//清空键盘缓冲区
                scanf("%d",&sno);
                head = del_item_ryb(head,sno, &del_message);                //删除
                if(del_message == 1)
                {
                        printf("删除成功!!!\n");
                }
                else{
                        printf("删除失败!!!\n");
                }
                system ("pause");
        }else if(value == 4)//排序
        {
r:                printf ("请请输入排序方式(1升序,2降序):");
                fflush(stdin);
                scanf("%d",&pxfs);
                printf ("请输入排序类型(1按学号,2按成绩):");
                fflush(stdin);
                scanf("%d",&pxlx);
                if (pxfs >2 || pxfs <0 || pxlx > 2 || pxlx <0 )
                {
                        printf ("排序方式或排序类型输入不符合规定!!!请重新输入!!!\n");
            system ("pause");
                        goto r;
                }
                if(pxfs==1)
                {
                head = order(head, asc,pxlx);
                }
                else {
                        head= order(head, desc, pxlx);
                }
                printf ("排序完成!!!\n");
            system("pause");
        }else if(value == 5)//保存数据
        {
                is_save = 'N';
                printf("您是否要保存当前修改过的学生数据,以前的数据将被覆盖!\n(Y\\N):");
                fflush(stdin);
                scanf ("%c", &is_save);
                if (is_save == 'Y' || is_save == 'y')
                {
                        ssave = save_data(head);
                        if(ssave == true)
                        {
                                printf ("当前数据已成功保存到磁盘!\n");
                                system("pause");
                        }else{
                        printf("保存失败或没有数据!\n");
                        system("pause");
                        }
                }
                else
                {
                        printf ("您取消了保存数据操作!\n");
                        system ("pause");

                }
        }else if(value == 6)//读取数据
        {
            is_read = 'N';
                printf("您是否要读取磁盘数据,执行此操作将覆盖当前数据,是否继续?\n(Y\\N):");
                fflush(stdin);
                scanf("%c", &is_read);
                if(is_read == 'Y' || is_read =='y')
                {
                        temp_h = read_data();
                        if(temp_h == NULL)
                        {
                        printf ("数据读取失败!\n");
                        system("pause");        
                        }else{
                        clear(head);//清空当前链表,释放空间
                        head = temp_h;//读取新链表
                        printf ("数据读取成功!\n");
                        system("pause");
                        }

                }
                else
        {
                printf("您取消了数据读取操作!\n");
                system ("pause");
        }
        }
        else if(value == 7)
        {
                amend_sno = 0;
                printf("请输入要修改的学生学号:");
                fflush(stdin);
                scanf ("%d",&amend_sno);
                if(amend_sno > 0 && amend_sno <= MAX_SNO)
                {
                        amend_ryb(head, amend_sno);

                }
                else{
                printf ("学号输入不合法,学号为1-%d之间的数包括(1,%d)!!!\n",MAX_SNO,MAX_SNO);
                        system("pause");
                        continue;
                }
        }
        else if(value == 8)//退出
        {
                printf("您确定要退出蔚蓝学生成绩管理系统吗?(Y\\N):");
                fflush(stdin);
                scanf("%c",&is_quit);
                if(is_quit == 'Y' || is_quit == 'y')
                {
                exit = true;
                printf ("感谢使用蔚蓝学生成绩管理系统,再见!\n");
                system("pause");
                }
               
        }
        else{
                printf("请输入1-7之间的数!!!\n");
                system("pause");
        }
        
        system("cls");
        }while(exit == false);
        return 0;
}
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$主程序END$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//由于发帖内容长度限制,后代码请下载附件查看


QQ拼音截图未命名.png
QQ拼音截图未命名1.png
QQ拼音截图未命名2.png
QQ拼音截图未命名3.png

C语言简单学生成绩管理系统-链表-源码.zip

6.28 KB, 阅读权限: 5, 下载次数: 420

售价: 1 鱼币  [记录]

源码

评分

参与人数 2荣誉 +5 鱼币 +5 贡献 +3 收起 理由
qingchen + 2 + 2
~风介~ + 3 + 3 + 3 发帖可以用代码格式哦!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-12-29 19:39:36 | 显示全部楼层
:call:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-12-30 19:30:36 | 显示全部楼层
对挖d
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-1 23:04:04 | 显示全部楼层
瞅瞅~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-1-1 23:14:29 | 显示全部楼层
:handshake 好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-1-2 13:19:41 | 显示全部楼层
{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-1-2 14:11:33 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-1-2 14:30:34 | 显示全部楼层
不错啊 可以了 是不是计算机专用?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-2 19:03:16 | 显示全部楼层
我还在纠结c语言,蛋疼。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-2 19:13:15 | 显示全部楼层
亲,我的cfree5.0报错咯。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-2 22:48:48 | 显示全部楼层
不错,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-1-3 15:20:20 | 显示全部楼层
~风介~ 发表于 2015-1-2 19:13
亲,我的cfree5.0报错咯。

c-free没试过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-3 18:57:31 | 显示全部楼层
谢谢分享  学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-4 08:16:40 | 显示全部楼层
写的不错哦:big
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-4 09:39:05 | 显示全部楼层
不错不错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-4 11:01:16 | 显示全部楼层
zan
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-1-4 12:37:32 | 显示全部楼层
生成绩管理系统-链表实现-附源
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-4 12:55:35 | 显示全部楼层
很不错啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-4 13:03:18 | 显示全部楼层
不错啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-4 14:16:23 | 显示全部楼层
学习链表。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 23:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表