c语言选课系统_文库
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int i = 11;
double num = 0;
printf("\n\n —————————————学生信息管理系统 —————————————");
while(1)//下面是主菜单,此处用死循环,内部包含了exit(0)选项,所以,只要选择相应选项就结束程序
{
printf("\n\n\t\t\t 1.录入学生信息");
while(scanf("%d", &(pNew->st.age))!=1 || pNew->st.age<1 || pNew->st.age>100)//判断年龄输入是否正确
{
fflush(stdin);
printf("\n年龄输入有误,请重新输入!\n");
printf("\n请输入%s同学的年龄(1~100):\n", pNew->);
void data_store(PNODE pHead);//以二进制文件形式存储学生信息数据
void output(void);//输出学生信息
void delete_list(void);//删除学生信息
void change_data_store(PNODE pHead);//(删除、修改)更新学生信息后,重新以覆盖数据文件的方式把学生信息写入二进制数据文件,并释放所有链表申请的动态内存
printf("\n请输入%s同学的学号:\n", pNew->); br Nhomakorabeaak;
case 6:
printf("\n您选择执行的操作是:6.学生信息排序\n");
sort_stu();//对学生信息进行排序
break;
case 7:
printf("\n您选择执行的操作是:7.生成文本信息\n");
printf("\n此选项会将数据文件内存储的学生信息保存为一个\"学生信息.txt\"文件");
case 4:
printf("\n您选择执行的操作是:4.删除学生信息\n");
delete_list();//删除学生信息
break;
case 5:
printf("\n您选择执行的操作是:5.输出学生信息\n");
output();//输出学生信息
printf("\n生成之后的\"学生信息.txt\"文件与此程序及程序数据文件处于同一目录\n");
printf("\n要生成文本信息");
system("PAUSE");
of_text();
break;
case 8:
printf("\n您选择执行的操作是:8.退出管理系统\n");
exit(-1);
}
printf("\n请输入本次录入第%d个学生的姓名:\n", len);//判断姓名输入是否正确
while(scanf("%s", pNew->)!=1 || is_onlyname(pHead, pNew) || is_data_onlyname(pNew))
printf("\n\n\t\t\t 6.学生信息排序");
printf("\n\n\t\t\t 7.生成文本信息");
printf("\n\n\t\t\t 8.退出管理系统\n");
printf("\n\n请选择您需要执行的操作:");
while(scanf("%lf", &num)!=1 || num<1 || num>8 || (int)num!=num)//此处用以界定用户输入的范围
sleep(1);
system("cls"); //清屏
printf("\n\n\n\t\t\t 本软件在最大化窗口使用显示更佳\n\n\t\t本软件仅供学习使用 任何其他用途照成的损失与作者无关");
printf("\n\n\n\n\t\t\t\t 软件作者:Miracle");
double sum;//总分
double avg;//平均分
}STU,*PSTU;
typedef struct node//定义一个链表节点类型
{
STU st;
struct node * pNext;
}NODE, *PNODE;
PNODE create_list(void);//(创建链表)录入学生信息
}
return 0;
}
PNODE create_list(void)
{
int len = 0;//用来确定下面用户录入学生信息时,录入是第几个学生
char ch = '0';//用以接收此函数执行完后提示用户是否继续所需要输入的Y/N
PNODE pHead = (PNODE)malloc(sizeof(NODE));//定义一个头节点
if(NULL == pHead)//动态分配内存失败就结束程序
{
printf("动态内存分配失败,程序终止!\n");
exit(-1);
}
PNODE pEnd = pHead;//定义一个指针指向头节点
pEnd->pNext = NULL;
while(1)//此处为死循环,内部设计了break可跳出循环
_Bool is_data_onlyname(PNODE);//用以判断用户录入时输入的学号与数据文件内学生信息中是否存在相同学号
_Bool is_data_onlysid(PNODE);//用以判断用户录入时输入的学号与数据文件内学生信息中是否存在相同学号
int main(void)
{
PNODE pHead = NULL;//定义一个头指针
# include <stdio.h>
# include <stdlib.h>
# include <malloc.h>
//# include <stdbool.h>
# include <string.h>
#include <stdafx.h>
# include <windows.h>
typedef struct student//定义一个学生类型
}
fflush(stdin);
printf("\n请输入%s同学的性别(男/女):\n", pNew->);//判断性别输入是否正确
while(scanf("%s", pNew->st.gender)!=1 || strcmp(pNew->st.gender,"男")!=0 && strcmp(pNew->st.gender,"女")!=0)
printf("\n您选择执行的操作是:2.查找学生信息\n");
find_stu();//查找学生
break;
case 3:
printf("\n您选择执行的操作是:3.修改学生信息\n");
change_stu();//修改学生信息
break;
--i;
}
//printf("\n程序结束!感谢您的使用!\n");
exit(0);//结束程序运行
}
//free_memory(pHead);
printf("\n");
system("PAUSE");//用于用户选择菜单项执行完后,避免直接弹出主菜单把输出结果顶上去,需要用户按任意键继续操作
void sort_stu(void);//对学生成绩进行排序
void of_text(void);//生成文本文件
_Bool is_onlyname(PNODE pHead, PNODE pNew);//用以判断用户录入产生的链表中是否存在相同姓名
_Bool is_onlysid(PNODE pHead, PNODE pNew);//用以判断用户录入产生的链表中是否存在相同学号
printf("\n\n\t\t\t 2.查找学生信息");
printf("\n\n\t\t\t 3.修改学生信息");
printf("\n\n\t\t\t 4.删除学生信息");
printf("\n\n\t\t\t 5.输出学生信息");
{
++len;//分配好内存就+1,表示此次录入是第几个学生
PNODE pNew = (PNODE)malloc(sizeof(NODE));//定义一个链表节点
if(NULL == pNew)//动态分配内存失败就结束程序
{
printf("动态内存分配失败,程序终止!\n");
{
printf("输入有误,请重新输入\n");
fflush (stdin);//清空输入缓冲区
printf("\n请选择您需要执行的操作:\n");
}
fflush (stdin);
switch((int)num)//用户选择菜单选项后执行对应操作
{
printf("\n\n\n\t\t\t\t编程交流群:86288220\n");
printf("\n\n\n\t\t\t 感谢您的使用,正在退出程序......");
while(i>1)//用以处理软件的倒计时
{
sleep(1);
printf("%d\b", i-2);
while(scanf("%s", pNew->st.sid)!=1 || is_onlysid(pHead, pNew) || is_data_onlysid(pNew))//判断学号输入是否正确
{
fflush(stdin);
printf("\n学号输入有误,请重新输入!\n");
{
fflush(stdin);
printf("\n性别输入有误,请重新输入!\n");
printf("\n请输入%s同学的性别(男/女):\n", pNew->);
}
fflush(stdin);
printf("\n请输入%s同学的学号:\n", pNew->);
case 1:
printf("\n您选择执行的操作是:1.录入学生信息\n");
pHead = create_list();//用户录入学生信息
data_store(pHead);//当录入结束后,自动保存学生信息到二进制文件
break;
case 2:
PNODE read_data(void);//读取数据文件, 并以数据文件内的学生信息数据重新生成链表,把头指针返回给调用函数
void find_stu(void);//查找学生信息
void change_stu(void);//修改学生信息
void free_memory(PNODE pHead);//对生成链表所分配的动态内存进行释放
{
fflush(stdin);
printf("\n姓名输入有误,请重新输入!\n");
printf("\n请输入本次录入第%d个学生的姓名:\n", len);
}
fflush(stdin);
printf("\n请输入%s同学的年龄(1~100):\n", pNew->);
{
char sid[10];//学号
char name[10];//姓名
char gender[5];//性别
int age;//年龄
double chinese_score;//语文成绩
double math_score;//数学成绩
double english_score;//英语成绩
double num = 0;
printf("\n\n —————————————学生信息管理系统 —————————————");
while(1)//下面是主菜单,此处用死循环,内部包含了exit(0)选项,所以,只要选择相应选项就结束程序
{
printf("\n\n\t\t\t 1.录入学生信息");
while(scanf("%d", &(pNew->st.age))!=1 || pNew->st.age<1 || pNew->st.age>100)//判断年龄输入是否正确
{
fflush(stdin);
printf("\n年龄输入有误,请重新输入!\n");
printf("\n请输入%s同学的年龄(1~100):\n", pNew->);
void data_store(PNODE pHead);//以二进制文件形式存储学生信息数据
void output(void);//输出学生信息
void delete_list(void);//删除学生信息
void change_data_store(PNODE pHead);//(删除、修改)更新学生信息后,重新以覆盖数据文件的方式把学生信息写入二进制数据文件,并释放所有链表申请的动态内存
printf("\n请输入%s同学的学号:\n", pNew->); br Nhomakorabeaak;
case 6:
printf("\n您选择执行的操作是:6.学生信息排序\n");
sort_stu();//对学生信息进行排序
break;
case 7:
printf("\n您选择执行的操作是:7.生成文本信息\n");
printf("\n此选项会将数据文件内存储的学生信息保存为一个\"学生信息.txt\"文件");
case 4:
printf("\n您选择执行的操作是:4.删除学生信息\n");
delete_list();//删除学生信息
break;
case 5:
printf("\n您选择执行的操作是:5.输出学生信息\n");
output();//输出学生信息
printf("\n生成之后的\"学生信息.txt\"文件与此程序及程序数据文件处于同一目录\n");
printf("\n要生成文本信息");
system("PAUSE");
of_text();
break;
case 8:
printf("\n您选择执行的操作是:8.退出管理系统\n");
exit(-1);
}
printf("\n请输入本次录入第%d个学生的姓名:\n", len);//判断姓名输入是否正确
while(scanf("%s", pNew->)!=1 || is_onlyname(pHead, pNew) || is_data_onlyname(pNew))
printf("\n\n\t\t\t 6.学生信息排序");
printf("\n\n\t\t\t 7.生成文本信息");
printf("\n\n\t\t\t 8.退出管理系统\n");
printf("\n\n请选择您需要执行的操作:");
while(scanf("%lf", &num)!=1 || num<1 || num>8 || (int)num!=num)//此处用以界定用户输入的范围
sleep(1);
system("cls"); //清屏
printf("\n\n\n\t\t\t 本软件在最大化窗口使用显示更佳\n\n\t\t本软件仅供学习使用 任何其他用途照成的损失与作者无关");
printf("\n\n\n\n\t\t\t\t 软件作者:Miracle");
double sum;//总分
double avg;//平均分
}STU,*PSTU;
typedef struct node//定义一个链表节点类型
{
STU st;
struct node * pNext;
}NODE, *PNODE;
PNODE create_list(void);//(创建链表)录入学生信息
}
return 0;
}
PNODE create_list(void)
{
int len = 0;//用来确定下面用户录入学生信息时,录入是第几个学生
char ch = '0';//用以接收此函数执行完后提示用户是否继续所需要输入的Y/N
PNODE pHead = (PNODE)malloc(sizeof(NODE));//定义一个头节点
if(NULL == pHead)//动态分配内存失败就结束程序
{
printf("动态内存分配失败,程序终止!\n");
exit(-1);
}
PNODE pEnd = pHead;//定义一个指针指向头节点
pEnd->pNext = NULL;
while(1)//此处为死循环,内部设计了break可跳出循环
_Bool is_data_onlyname(PNODE);//用以判断用户录入时输入的学号与数据文件内学生信息中是否存在相同学号
_Bool is_data_onlysid(PNODE);//用以判断用户录入时输入的学号与数据文件内学生信息中是否存在相同学号
int main(void)
{
PNODE pHead = NULL;//定义一个头指针
# include <stdio.h>
# include <stdlib.h>
# include <malloc.h>
//# include <stdbool.h>
# include <string.h>
#include <stdafx.h>
# include <windows.h>
typedef struct student//定义一个学生类型
}
fflush(stdin);
printf("\n请输入%s同学的性别(男/女):\n", pNew->);//判断性别输入是否正确
while(scanf("%s", pNew->st.gender)!=1 || strcmp(pNew->st.gender,"男")!=0 && strcmp(pNew->st.gender,"女")!=0)
printf("\n您选择执行的操作是:2.查找学生信息\n");
find_stu();//查找学生
break;
case 3:
printf("\n您选择执行的操作是:3.修改学生信息\n");
change_stu();//修改学生信息
break;
--i;
}
//printf("\n程序结束!感谢您的使用!\n");
exit(0);//结束程序运行
}
//free_memory(pHead);
printf("\n");
system("PAUSE");//用于用户选择菜单项执行完后,避免直接弹出主菜单把输出结果顶上去,需要用户按任意键继续操作
void sort_stu(void);//对学生成绩进行排序
void of_text(void);//生成文本文件
_Bool is_onlyname(PNODE pHead, PNODE pNew);//用以判断用户录入产生的链表中是否存在相同姓名
_Bool is_onlysid(PNODE pHead, PNODE pNew);//用以判断用户录入产生的链表中是否存在相同学号
printf("\n\n\t\t\t 2.查找学生信息");
printf("\n\n\t\t\t 3.修改学生信息");
printf("\n\n\t\t\t 4.删除学生信息");
printf("\n\n\t\t\t 5.输出学生信息");
{
++len;//分配好内存就+1,表示此次录入是第几个学生
PNODE pNew = (PNODE)malloc(sizeof(NODE));//定义一个链表节点
if(NULL == pNew)//动态分配内存失败就结束程序
{
printf("动态内存分配失败,程序终止!\n");
{
printf("输入有误,请重新输入\n");
fflush (stdin);//清空输入缓冲区
printf("\n请选择您需要执行的操作:\n");
}
fflush (stdin);
switch((int)num)//用户选择菜单选项后执行对应操作
{
printf("\n\n\n\t\t\t\t编程交流群:86288220\n");
printf("\n\n\n\t\t\t 感谢您的使用,正在退出程序......");
while(i>1)//用以处理软件的倒计时
{
sleep(1);
printf("%d\b", i-2);
while(scanf("%s", pNew->st.sid)!=1 || is_onlysid(pHead, pNew) || is_data_onlysid(pNew))//判断学号输入是否正确
{
fflush(stdin);
printf("\n学号输入有误,请重新输入!\n");
{
fflush(stdin);
printf("\n性别输入有误,请重新输入!\n");
printf("\n请输入%s同学的性别(男/女):\n", pNew->);
}
fflush(stdin);
printf("\n请输入%s同学的学号:\n", pNew->);
case 1:
printf("\n您选择执行的操作是:1.录入学生信息\n");
pHead = create_list();//用户录入学生信息
data_store(pHead);//当录入结束后,自动保存学生信息到二进制文件
break;
case 2:
PNODE read_data(void);//读取数据文件, 并以数据文件内的学生信息数据重新生成链表,把头指针返回给调用函数
void find_stu(void);//查找学生信息
void change_stu(void);//修改学生信息
void free_memory(PNODE pHead);//对生成链表所分配的动态内存进行释放
{
fflush(stdin);
printf("\n姓名输入有误,请重新输入!\n");
printf("\n请输入本次录入第%d个学生的姓名:\n", len);
}
fflush(stdin);
printf("\n请输入%s同学的年龄(1~100):\n", pNew->);
{
char sid[10];//学号
char name[10];//姓名
char gender[5];//性别
int age;//年龄
double chinese_score;//语文成绩
double math_score;//数学成绩
double english_score;//英语成绩