|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//由于发帖内容长度限制,后代码请下载附件查看
|
评分
-
查看全部评分
|