班级缴费信息管理系统
(大一上学期C语言课设)
一、需求分析
要求:本节是需求分析的部分,该节主要说明课程设计题目的具体要求,如:程序应具备的功能、程序设计时必须使用的数据结构(数组、动态链表、文件等)、程序运行时对输入输出格式的要求以及对程序运行性能的要求等,在撰写本节的文档时,对于以上的具体要求应详细地给出明确的说明。
3.班级缴费信息管理系统
实现班级的创建、修改、删除功能,能够对班级中的学生信息进行增、删、改操作,并能够对班级应交学费进行计算(本科生学费为专科生学费的80%,研究生学费为本科生学费的70%)。能够按照班级、学号、姓名等对学生缴费情况进行查询,并按照学生缴费金额的多少进行排序显示。如果全班缴纳学费低于总学费的80%则显示欠费学生信息,能查询所有欠费学生信息,也能按条件查询欠费学生的信息。
(要求:1.系统以文本菜单的形式显示2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的内容需要自学)
1.用链表的基本操作完成班级缴费信息管理系统
2.用结构体储存学生信息(本科,专科,研究生),再创建一条链表,链表中定义一个student型的结构体变量,和next指针。
3.用户从屏幕上输入学生信息(学号,姓名,性别,学位,缴费数),完成对链表的初始化。
4.屏幕一直显示系统功能主菜单
程序执行的命令:
(1)能创建初始化班级缴费信息管理系统;
(2)能实现修改,添加,删除学生信息;
(3)能计算班级实交学费应交学费;
(4)能按照班级对学生缴费情况查询;
(5)能对学生缴费金额排序(链表选择排序);
(6)能判断缴费金额是否低于全班总学费的80%;
(7)能查询所有欠费学生信息;
(8)能按条件(性别)查询欠费学生信息 ;
(9)能显示用户想知道的学生信息;
二、概要设计
要求:概要设计是在理解程序的各项需求以后,对程序的结构和模块进行设计的环节。该节主要说明的内容包括对程序中所使用数据结构的介绍(如数组、数组表示的意义、数组的名称、结构体的名称,结构体成员表示的意义,文件的名称等)、对程序中主要模块以及模块之间关系的介绍(即程序由哪些模块组成,模块之间有何种关系等),在撰写本节的文档时,对于以上的具体内容给出详尽的说明。
⒈ 设计班级缴费信息管理系统功能函数模块:
int menu();int output(linklist*);int create(linklist *); //1.创建链表int modify(linklist *); //2.修改学生信息int add(linklist *); //3.添加int delect(linklist *); //4.删除int count_fee(); //5.计算班级实交学费,应缴学费int class_num_name(linklist *); //6.按照班级学对学生缴费情况查询int sort(linklist *); //7.按照学生缴费金额排序 int judge(linklist *); //8.判断全班缴费是否低于总学费的80%int search(linklist *); //9.查询 所有欠费学生信息int require_search(linklist *); //10.按条件(性别)查询欠费学生信息int display(linklist *); //11.显示你想知道的学生信息int find(linklist*, char*); //节点位置int panduan(linklist*, linklist*); //判断是否缴清
- 本程序模块结构
⑴ 函数模块
三、详细设计
要求:详细设计是在概要设计基础上对各模块进一步细化的环节。本节需要介绍的内容包括程序中所有函数的介绍(包括函数的原型,函数的功能,各参数的名称以及表示的意义)、函数之间的调用关系(见如下的例子)、程序核心模块算法的介绍(需要用流程图描述),在撰写本节的文档时,对于以上的具体内容给出详尽的说明,作图要规范,排版要统一
1.系统流程图
2.基本数据类型操作
⑴ 储存学生缴费信息模块
①typedef struct{char id[20]; //学号char name[20]; //姓名int fee; //所缴学费char sex; //性别char situation; //缴费状态char degree[20]; //学位}student;② typedef struct linklist{student people; //student型的结构体变量struct linklist *next; //指向下一个节点的指针}linklist;
3. 各函数功能模块
//------------------基本操作的算法描述--------------------
- 学生学费排序模块 //断开节点实现
int sort(linklist*head) //7.按照学生缴费金额排序{linklist *p, *q, *m, *n;linklist *temp1, *temp2;if (head->next == NULL)printf("NO LINKLIST!!!");else{p = head;q = head->next;while (q->next != NULL){m = p->next;n = q->next;temp1 = m;while (temp1->next != NULL){if (temp1->next->people.fee < q->people.fee && temp1->next->people.fee < n->people.fee){m = temp1; n = temp1->next;}temp1 = temp1->next;}/*_*====此循环用于找到基准(q)以后的序列的最小的节点=====*_*/if (m != p->next || (m == p->next && m->people.fee > n->people.fee)){p->next = n;p = n;m->next = q;m = q;q = q->next;n = n->next;p->next = q;m->next = n;}/*_*======此条件用于交换两个节点*_*/else{p = p->next;q = q->next;}/*_*======此条件用于没有找到最小值时的p,q后移操作*_*/}/*_*=====外循环用于从前往后扫描,通过移动p,q指针实现=======*_*/temp2 = head->next;printf("List after sorting is:\n");}for(p=head->next;p!=NULL;p=p->next)printf("%10s\t%11s\t%c\t%d\t %c\t%15s\n", (p->people).id, (p->people).name, (p->people).sex, (p->people).fee, p->people.situation, (p->people).degree);output(head);printf("\n");}
(2)创建链表模块
int create(linklist *head)//1.创建链表
{linklist*p, *q;p = head;outfile.open("out.txt");printf("请依次输入学生的学号(例如:junior_01,under_01,post_01),姓名 ,性别(//M为男,F为女),缴费数 , 学位(专科:junior,本科:undergraduate,研究生:postgraduate)。 以end结束\n");while (1){char temp[10];cin >> temp; outfile << temp;if (strcmp(temp, "end") == 0)break;q = (linklist*)malloc(sizeof(linklist));strcpy(q->people.id, temp);cin >> q->people.name; outfile << q->people.name;cin >> q->people.sex; outfile << q->people.sex;cin >> q->people.fee; outfile << q->people.fee;cin >> q->people.degree; outfile << q->people.degree;panduan(head, q);p->next = q;p = q;}q->next = NULL;outfile.close();return 0;
}
(3)菜单代码
int menu()
{int n;printf("-----------------------------班级缴费信息管理系统--------------------------------\n");printf("//专科学费为10000,本科学费为8000,研究生学费为5600。(本科生学费为专科生学费的百分之80,研究生学费为本科生学费的百分之70\n");printf("请输入(1 —12):\n\n");printf("1.创建学生信息\t\t\t2.修改学生信息\n\n");printf("3.添加学生信息\t\t\t4.删除学生信息\n\n");printf("5.计算班级应交学费\t\t6.按照班级对学生缴费情况进行查询\n\n");printf("7.按照学生缴费金额排序\t\t8.判断缴费是否低于总学费的80%\n\n");printf("9.显示所有欠费学生信息\t\t10.按条件查询欠费学生信息\n\n");printf("11.显示你想知道的学生信息\t12.退出\n");printf("\n-------------------------------------------------------------------------\n");scanf("%d", &n);return n;
}
(4)寻找学生所在位置代码
int find(linklist*head, char a[20]) //a[20]表示学生的学号或姓名{linklist *p;p = head->next;int i = 0;for (i = 0; i < num; i++, p = p->next){if ((!strcmp(p->people.id, a)) || (!strcmp(a, p->people.name)))return i;}return -1;
}return -1;}
(5)修改学生信息模块核心代码
int modify(linklist *head)//2.修改学生信息
{char a[20]; int i = 0; int temp = 0;linklist*p; p = head->next;printf("请输入你想修改的学生的姓名或学号\n");cin >> a;for (i = 0; i < find(head, a); i++)p = p->next;temp = p->people.fee;printf("请输入新信息:学号(例如:junior_01,under_01,post_01),姓名 ,性别(//M为男,F为女),缴费数 , 学位(专科:junior,本科:undergraduate,研究生:postgraduate)\n");cin >> p->people.id; cin >> p->people.name; cin >> p->people.sex; cin >> p->people.fee; cin >> p->people.degree;if (strcmp(p->people.degree, "junior") == 0){really_money1 = really_money1 - temp + p->people.fee;if (p->people.fee < 10000)p->people.situation = 'N';elsep->people.situation = 'Y';}if (strcmp(p->people.degree, "undergraduate") == 0){really_money2 = really_money2 - temp + p->people.fee;if (p->people.fee < 8000)p->people.situation = 'N';elsep->people.situation = 'Y';}if (strcmp(p->people.degree, "postgraduate") == 0){really_money3 = really_money3 - temp + p->people.fee;if (p->people.fee < 5600)p->people.situation = 'N';elsep->people.situation = 'Y';}return 0;
}
(6)添加学生信息核心代码
int add(linklist *head)//3.添加
{linklist*p, *q;p = head->next;q = (linklist*)malloc(sizeof(linklist));q->next = NULL;while (p->next != NULL)p = p->next;printf("请输入需要添加的学生学号(例如:junior_01,under_01,post_01),姓名 ,性别(//M为男,F为女),缴费数 , 学位(专科:junior,本科:undergraduate,研究生:postgraduate)\n");cin >> q->people.id; cin >> q->people.name; cin >> q->people.sex; cin >> q->people.fee; cin >> q->people.degree;panduan(head, q);p->next = q;return 0;
}
(7)删除学生信息核心代码
int delect(linklist *head)//4.删除
{linklist*p; p = head;int i = 0, n = 0, temp = 0;char a[20];printf("请输入你想删除的学生的姓名或学号\n");cin >> a;n = find(head, a);if (-1 == n){printf("没有找到\n");return 0;}for (i = 0; i < n; i++)p = p->next;temp = p->next->people.fee;if (strcmp(p->next->people.degree, "junior") == 0){really_money1 = really_money1 - temp;num1--;}if (strcmp(p->next->people.degree, "undergraduate") == 0){really_money2 = really_money2 - temp;num2--;}if (strcmp(p->next->people.degree, "postgraduate") == 0){really_money3 = really_money3 - temp;num3--;}p->next = p->next->next;num--;
}
(8)查询所有欠费学生信息模块
int search(linklist *head)//9.查询 所有欠费学生信息
{
int n = 0;
linklist*p; p = head->next;
printf("\n------------------所有欠费学生信息------------------\n");
while (p != NULL)
{
if (p->people.situation == 'N')
{
n++;
printf("%10s\t%11s\t%c\t%d\t %c\t%15s\n", (p->people).id, (p->people).name, (p->people).sex, (p->people).fee, p->people.situation, (p->people).degree);
}
p = p->next;
}
printf("一共有%d个学生欠费\n\n", n);
}
(9)按性别查询欠费学生信息核心代码
printf("请输入你想查询的欠费学生性别:M男生 F女生 //输入M或F\n");
cin >> n;
while (p != NULL)
{
switch (n)
{
case 'F':
if (p->people.sex == 'F'&&p->people.situation == 'N')
printf("%10s\t%11s\t%c\t%d\t %c\t%15s\n", (p->people).id, (p->people).name, (p->people).sex, (p->people).fee, p->people.situation, (p->people).degree);
break;
case 'M':
if (p->people.sex == 'M'&&p->people.situation == 'N')
printf("%10s\t%11s\t%c\t%d\t %c\t%15s\n", (p->people).id, (p->people).name, (p->people).sex, (p->people).fee, p->people.situation, (p->people).degree);
break;
defult:
printf("输入错误!!!\n");
}
p = p->next;
}
四、调试分析
要求:本节为调试分析的部分,在撰写本节的文档时,应对程序调试过程中出现的问题以及如何解决的过程进行说明。说明应详尽,排版要统一。
1.最开始用的三条链表示三个班(专、本、研究生),然后发现写这些功能函数的时候重复的代码太多了,越写越长(每个功能又要分三条链表)。一怒之下全重写了,改成一条,增加了一个属性:学位
2.输入学生信息初始化程序后,再输出时,发现乱码。。。。。调试的时候发现是scanf的安全输入问题,用cin>>或者gets解决
- 学生学费排序之前用的是冒泡排序,定义一个结构体temp变量,交换数据,,,然后老师说数据一旦多了,时间和空间成本高,改!用指针断开&&接上
- 界面要工整好看对齐
5.要实现判断是否缴清学费
五、用户手册
要求:本节需要对程序运行时的操作步骤和使用顺序做出具体的说明(如是否对路径要求,如何运行程序等)。说明应详尽,排版要统一。
⒈ 本程序的运行环境为Dev-c++、codeblocks、visual studio等工具。
⒉ 进入演示程序后,即显示对话形式的提示操作过程,
用户按“1”输入学生信息
用户按“2”实现修改学生信息,
用户按“3”实现添加学生信息,
用户按“4”实现删除学生信息
用户按“5”计算班级实交学费应交学费;
用户按“6”能按照班级对学生缴费情况查询;
用户按“7”对学生缴费金额排序(链表选择排序);
用户按“8”判断缴费金额是否低于全班总学费的80%;
用户按“9”能查询所有欠费学生信息;
用户按“10”能按条件(性别)查询欠费学生信息 ;
用户按“11”显示用户想知道的学生信息;
用户按“12”退出系统
六、测试数据
要求:本节需要对程序调试过程中所使用的测试数据以及输入测试数据以后的结果进行说明。说明应详尽,排版要统一。
-----------------------------班级缴费信息管理系统--------------------------------
//专科学费为10000,本科学费为8000,研究生学费为5600。(本科生学费为专科生学费的百分之80,研究生学费为本科生学费的百分之70
请输入(1 —12):
1.创建学生信息 2.修改学生信息
3.添加学生信息 4.删除学生信息
5.计算班级应交学费 6.按照班级对学生缴费情况进行查询
7.按照学生缴费金额排序 8.判断缴费是否低于总学费的80%
9.显示所有欠费学生信息 10.按条件查询欠费学生信息
11.显示你想知道的学生信息 12.退出
-------------------------------------------------------------------------
1
请依次输入学生的学号(例如:junior_01,under_01,post_01),姓名 ,性别(//M为男,F为女),缴费数 , 学位(专科:junior,本科:undergraduate,研究生:postgraduate)。 以end结束
//以下为测试数据~~~~~
junior_01 wangfan F 10000 junior
under_01 chenhuijuan F 9000 undergraduate
post_01 peiweifeng M 8000 postgraduate
junior_02 wunan F 7000 junior
under_02 guoxiaoru F 6000 undergraduate
post_02 huqin M 5000 postgraduate
junior_03 zhangsan F 4000 junior
under_03 lisi F 3000 undergraduate
post_03 wangwu M 2000 postgraduate
end
---------------------------------专科学生-------------------------------
junior_01 wangfan F 10000 Y junior
junior_02 wunan F 7000 N junior
junior_03 zhangsan F 4000 N junior
---------------------------------本科学生-------------------------------
under_01 chenhuijuan F 9000 Y undergraduate
under_02 guoxiaoru F 6000 N undergraduate
under_03 lisi F 3000 N undergraduate
---------------------------------研究生---------------------------------
post_01 peiweifeng M 8000 Y postgraduate
post_02 huqin M 5000 N postgraduate
post_03 wangwu M 2000 N postgraduate
2
请输入你想修改的学生的姓名或学号
chenhuijuan
请输入新信息:学号(例如:junior_01,under_01,post_01),姓名 ,性别(//M为男,F为女),缴费数 , 学位(专科:junior,本科 :undergraduate,研究生:postgraduate)
junior_05 xxxxx M 99 junior
---------------------------------专科学生-------------------------------
junior_01 wangfan F 10000 Y junior
junior_05 xxxxx M 99 N junior
junior_02 wunan F 7000 N junior
junior_03 zhangsan F 4000 N junior
---------------------------------本科学生-------------------------------
under_02 guoxiaoru F 6000 N undergraduate
under_03 lisi F 3000 N undergraduate
---------------------------------研究生---------------------------------
post_01 peiweifeng M 8000 Y postgraduate
post_02 huqin M 5000 N postgraduate
post_03 wangwu M 2000 N postgraduate
3
请输入需要添加的学生学号(例如:junior_01,under_01,post_01),姓名 ,性别(//M为男,F为女),缴费数 , 学位(专科:junior,本科:undergraduate,研究生:postgraduate)
post_05 yyyyy F 99 postgraduate
---------------------------------专科学生-------------------------------
junior_01 wangfan F 10000 Y junior
junior_05 xxxxx M 99 N junior
junior_02 wunan F 7000 N junior
junior_03 zhangsan F 4000 N junior
---------------------------------本科学生-------------------------------
under_02 guoxiaoru F 6000 N undergraduate
under_03 lisi F 3000 N undergraduate
---------------------------------研究生---------------------------------
post_01 peiweifeng M 8000 Y postgraduate
post_02 huqin M 5000 N postgraduate
post_03 wangwu M 2000 N postgraduate
post_05 yyyyy F 99 N postgraduate
4
请输入你想删除的学生的姓名或学号
guoxiaoru
---------------------------------专科学生-------------------------------
junior_01 wangfan F 10000 Y junior
junior_05 xxxxx M 99 N junior
junior_02 wunan F 7000 N junior
junior_03 zhangsan F 4000 N junior
---------------------------------本科学生-------------------------------
under_03 lisi F 3000 N undergraduate
---------------------------------研究生---------------------------------
post_01 peiweifeng M 8000 Y postgraduate
post_02 huqin M 5000 N postgraduate
post_03 wangwu M 2000 N postgraduate
post_05 yyyyy F 99 N postgraduate
5
专科人数为:3 实交学费:12099 应交学费:30000
本科人数为:2 实交学费:12000 应交学费:16000
研究生人数为:4 实交学费:15099 应交学费:22400
6
-------------------------------按照班级对学生缴费情况查询--------------------------
---------------------------------专科学生-------------------------------
专科欠费学生:
junior_05 xxxxx M 99 N junior
junior_02 wunan F 7000 N junior
junior_03 zhangsan F 4000 N junior
专科缴清学费学生:
junior_01 wangfan F 10000 Y junior
---------------------------------本科学生-------------------------------
本科欠费学生:
under_03 lisi F 3000 N undergraduate
本科缴清学费学生:
---------------------------------研究生---------------------------------
研究生欠费学生:
post_02 huqin M 5000 N postgraduate
post_03 wangwu M 2000 N postgraduate
post_05 yyyyy F 99 N postgraduate
研究生缴清学费学生:
post_01 peiweifeng M 8000 Y postgraduate
7
---------------------------------专科学生-------------------------------
junior_05 xxxxx M 99 N junior
junior_03 zhangsan F 4000 N junior
junior_02 wunan F 7000 N junior
junior_01 wangfan F 10000 Y junior
---------------------------------本科学生-------------------------------
under_03 lisi F 3000 N undergraduate
---------------------------------研究生---------------------------------
post_05 yyyyy F 99 N postgraduate
post_03 wangwu M 2000 N postgraduate
post_02 huqin M 5000 N postgraduate
post_01 peiweifeng M 8000 Y postgraduate
8
专科全班缴费低于总学费的百分之80,为总学费的百分之40
junior_05 xxxxx M 99 N junior
junior_03 zhangsan F 4000 N junior
junior_02 wunan F 7000 N junior
本科全班缴费低于总学费的百分之80,为总学费的百分之75
under_03 lisi F 3000 N undergraduate
研究生全班缴费低于总学费的百分之80,为总学费的百分之67
post_05 yyyyy F 99 N postgraduate
post_03 wangwu M 2000 N postgraduate
post_02 huqin M 5000 N postgraduate
9
------------------所有欠费学生信息------------------
junior_05 xxxxx M 99 N junior
post_05 yyyyy F 99 N postgraduate
post_03 wangwu M 2000 N postgraduate
under_03 lisi F 3000 N undergraduate
junior_03 zhangsan F 4000 N junior
post_02 huqin M 5000 N postgraduate
junior_02 wunan F 7000 N junior
10
请输入你想查询的欠费学生性别:M男生 F女生 //输入M或F
F
post_05 yyyyy F 99 N postgraduate
under_03 lisi F 3000 N undergraduate
junior_03 zhangsan F 4000 N junior
junior_02 wunan F 7000 N junior
11
请输入你想查询的学生的学号或姓名
peiweifeng
post_01 peiweifeng M 8000 Y postgraduate
-----------------------------------------------------------------------------
七、附录
要求:本节可以根据实际的需要对部分主要的程序源代码进行介绍。代码要给出注释,排版要统一
1. 源程序
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<fstream>
using namespace std;
ofstream outfile;
int num1 = 0;//学生人数
int num2 = 0;
int num3 = 0;
int num = 0;//学生总人数
int really_money1 = 0;
int really_money2 = 0;
int really_money3 = 0;
int money1 = 0;
int money2 = 0;
int money3 = 0;
typedef struct
{char id[20];char name[20];int fee;char sex;char situation;char degree[20];
}student;
typedef struct linklist
{student people;struct linklist *next;
}linklist;
int menu();
int output(linklist*);
int create(linklist *);//1.创建链表
int modify(linklist *);//2.修改学生信息
int add(linklist *);//3.添加
int delect(linklist *);//4.删除
int count_fee(); //5.计算班级实交学费,应缴学费
int class_num_name(linklist *);//6.按照班级学对学生缴费情况查询
int sort(linklist *);//7.按照学生缴费金额排序
int judge(linklist *);//8.判断全班缴费是否低于总学费的80%
int search(linklist *);//9.查询 所有欠费学生信息
int require_search(linklist *);//10.按条件(性别)查询欠费学生信息
int display(linklist *);//11.显示你想知道的学生信息
int find(linklist*, char*);//节点位置
int panduan(linklist*, linklist*);//判断是否缴清
int main(int argc, char *argv[])
{linklist *head, *p;head = (linklist*)malloc(sizeof(linklist));head->next = NULL;while (1){switch (menu()){case 1:create(head);output(head);break;case 2:modify(head);output(head);break;case 3:add(head);output(head);break;case 4:delect(head);output(head);break;case 5:count_fee();break;case 6:class_num_name(head);break;case 7:sort(head);break;case 8:judge(head);break;case 9:search(head);break;case 10:require_search(head);break;case 11:display(head);break;case 12:printf("over\n");exit(0);break;default:printf("输错了,再来一次,请输入1~12\n");}system("pause");system("cls");}system("pause");return 0;
}int menu()
{int n;printf("-----------------------------班级缴费信息管理系统--------------------------------\n");printf("//专科学费为10000,本科学费为8000,研究生学费为5600。(本科生学费为专科生学费的百分之80,研究生学费为本科生学费的百分之70\n");printf("请输入(1 —12):\n\n");printf("1.创建学生信息\t\t\t2.修改学生信息\n\n");printf("3.添加学生信息\t\t\t4.删除学生信息\n\n");printf("5.计算班级应交学费\t\t6.按照班级对学生缴费情况进行查询\n\n");printf("7.按照学生缴费金额排序\t\t8.判断缴费是否低于总学费的80%\n\n");printf("9.显示所有欠费学生信息\t\t10.按条件查询欠费学生信息\n\n");printf("11.显示你想知道的学生信息\t12.退出\n");printf("\n-------------------------------------------------------------------------\n");scanf("%d", &n);return n;
}int create(linklist *head)//1.创建链表
{linklist*p, *q;p = head;outfile.open("out.txt");printf("请依次输入学生的学号(例如:junior_01,under_01,post_01),姓名 ,性别(//M为男,F为女),缴费数 , 学位(专科:junior,本科:undergraduate,研究生:postgraduate)。 以end结束\n");while (1){char temp[10];cin >> temp; outfile << temp;if (strcmp(temp, "end") == 0)break;q = (linklist*)malloc(sizeof(linklist));strcpy(q->people.id, temp);cin >> q->people.name; outfile << q->people.name;cin >> q->people.sex; outfile << q->people.sex;cin >> q->people.fee; outfile << q->people.fee;cin >> q->people.degree; outfile << q->people.degree;panduan(head, q);p->next = q;p = q;}q->next = NULL;outfile.close();return 0;
}
int modify(linklist *head)//2.修改学生信息
{char a[20]; int i = 0; int temp = 0;linklist*p; p = head->next;printf("请输入你想修改的学生的姓名或学号\n");cin >> a;for (i = 0; i < find(head, a); i++)p = p->next;temp = p->people.fee;printf("请输入新信息:学号(例如:junior_01,under_01,post_01),姓名 ,性别(//M为男,F为女),缴费数 , 学位(专科:junior,本科:undergraduate,研究生:postgraduate)\n");cin >> p->people.id; cin >> p->people.name; cin >> p->people.sex; cin >> p->people.fee; cin >> p->people.degree;if (strcmp(p->people.degree, "junior") == 0){really_money1 = really_money1 - temp + p->people.fee;if (p->people.fee < 10000)p->people.situation = 'N';elsep->people.situation = 'Y';}if (strcmp(p->people.degree, "undergraduate") == 0){really_money2 = really_money2 - temp + p->people.fee;if (p->people.fee < 8000)p->people.situation = 'N';elsep->people.situation = 'Y';}if (strcmp(p->people.degree, "postgraduate") == 0){really_money3 = really_money3 - temp + p->people.fee;if (p->people.fee < 5600)p->people.situation = 'N';elsep->people.situation = 'Y';}return 0;
}
int add(linklist *head)//3.添加
{linklist*p, *q;p = head->next;q = (linklist*)malloc(sizeof(linklist));q->next = NULL;while (p->next != NULL)p = p->next;printf("请输入需要添加的学生学号(例如:junior_01,under_01,post_01),姓名 ,性别(//M为男,F为女),缴费数 , 学位(专科:junior,本科:undergraduate,研究生:postgraduate)\n");cin >> q->people.id; cin >> q->people.name; cin >> q->people.sex; cin >> q->people.fee; cin >> q->people.degree;panduan(head, q);p->next = q;return 0;
}
int delect(linklist *head)//4.删除
{linklist*p; p = head;int i = 0, n = 0, temp = 0;char a[20];printf("请输入你想删除的学生的姓名或学号\n");cin >> a;n = find(head, a);if (-1 == n){printf("没有找到\n");return 0;}for (i = 0; i < n; i++)p = p->next;temp = p->next->people.fee;if (strcmp(p->next->people.degree, "junior") == 0){really_money1 = really_money1 - temp;num1--;}if (strcmp(p->next->people.degree, "undergraduate") == 0){really_money2 = really_money2 - temp;num2--;}if (strcmp(p->next->people.degree, "postgraduate") == 0){really_money3 = really_money3 - temp;num3--;}p->next = p->next->next;num--;
}
int count_fee()//5.计算班级应缴学费
{money1 = num1 * 10000;//专科 money2 = num2 * 8000;//benkemoney3 = num3 * 5600;//yanjiushengprintf("专科人数为:%d 实交学费:%d 应交学费:%d\n", num1, really_money1, money1);printf("本科人数为:%d 实交学费:%d 应交学费:%d\n", num2, really_money2, money2);printf("研究生人数为:%d 实交学费:%d 应交学费:%d\n", num3, really_money3, money3);}
int class_num_name(linklist *head)//6.按照班级对学生缴费情况查询
{linklist*p; p = head->next;printf("\n-------------------------------按照班级对学生缴费情况查询--------------------------\n");printf("---------------------------------专科学生-------------------------------\n");printf("专科欠费学生:\n");while (p != NULL){if (strcmp(p->people.degree, "junior") == 0 && p->people.situation == 'N')printf("%10s\t%11s\t%c\t%d\t %c\t%15s\n", (p->people).id, (p->people).name, (p->people).sex, (p->people).fee, p->people.situation, (p->people).degree);p = p->next;}printf("专科缴清学费学生:\n");p = head->next;while (p != NULL){if (strcmp(p->people.degree, "junior") == 0 && p->people.situation == 'Y')printf("%10s\t%11s\t%c\t%d\t %c\t%15s\n", (p->people).id, (p->people).name, (p->people).sex, (p->people).fee, p->people.situation, (p->people).degree);p = p->next;}printf("---------------------------------本科学生-------------------------------\n");printf("本科欠费学生:\n");p = head->next;while (p != NULL){if (strcmp(p->people.degree, "undergraduate") == 0 && p->people.situation == 'N')printf("%10s\t%11s\t%c\t%d\t %c\t%15s\n", (p->people).id, (p->people).name, (p->people).sex, (p->people).fee, p->people.situation, (p->people).degree);p = p->next;}printf("本科缴清学费学生:\n");p = head->next;while (p != NULL){if (strcmp(p->people.degree, "undergraduate") == 0 && p->people.situation == 'Y')printf("%10s\t%11s\t%c\t%d\t %c\t%15s\n", (p->people).id, (p->people).name, (p->people).sex, (p->people).fee, p->people.situation, (p->people).degree);p = p->next;}printf("---------------------------------研究生---------------------------------\n");printf("研究生欠费学生:\n");p = head->next;while (p != NULL){if (strcmp(p->people.degree, "postgraduate") == 0 && p->people.situation == 'N')printf("%10s\t%11s\t%c\t%d\t %c\t%15s\n", (p->people).id, (p->people).name, (p->people).sex, (p->people).fee, p->people.situation, (p->people).degree);p = p->next;}printf("研究生缴清学费学生:\n");p = head->next;while (p != NULL){if (strcmp(p->people.degree, "postgraduate") == 0 && p->people.situation == 'Y')printf("%10s\t%11s\t%c\t%d\t %c\t%15s\n", (p->people).id, (p->people).name, (p->people).sex, (p->people).fee, p->people.situation, (p->people).degree);p = p->next;}return 0;
}
int sort(linklist*head)
{linklist *p, *q, *m, *n;linklist *temp1, *temp2;if (head->next == NULL)printf("NO LINKLIST!!!");else{p = head; q = head->next;while (q->next != NULL){m = p->next;n = q->next;temp1 = m;while (temp1->next != NULL){if (temp1->next->people.fee < q->people.fee && temp1->next->people.fee < n->people.fee){m = temp1; n = temp1->next;}temp1 = temp1->next;}/*_*====此循环用于找到基准(q)以后的序列的最小的节点=====*_*/if (m != p->next || (m == p->next && m->people.fee > n->people.fee)){p->next = n;p = n;m->next = q;m = q;q = q->next;n = n->next;p->next = q;m->next = n;}/*_*======此条件用于交换两个节点*_*/else{p = p->next;q = q->next;}/*_*======此条件用于没有找到最小值时的p,q后移操作*_*/}/*_*=====外循环用于从前往后扫描,通过移动p,q指针实现=======*_*/temp2 = head->next;printf("List after sorting is:\n");}for(p=head->next;p!=NULL;p=p->next)printf("%10s\t%11s\t%c\t%d\t %c\t%15s\n", (p->people).id, (p->people).name, (p->people).sex, (p->people).fee, p->people.situation, (p->people).degree);output(head);printf("\n");
}int judge(linklist *head)//8.判断缴费是否低于总学费的80%
{linklist*p;p = head->next;int bili1, bili2, bili3;money1 = num1 * 10000;//专科 money2 = num2 * 8000;//benkemoney3 = num3 * 5600;//yanjiushengbili1 = really_money1 * 100 / money1;bili2 = really_money2 * 100 / money2;bili3 = really_money3 * 100 / money3;if (bili1 >= 80)printf("专科全班缴费高于总学费的百分之80,为总学费的百分之%d不需要显示未缴清学费的学生\n", bili1);else{printf("专科全班缴费低于总学费的百分之80,为总学费的百分之%d\n", bili1);while (p != NULL){if (strcmp(p->people.degree, "junior") == 0 && p->people.situation == 'N')printf("%10s\t%11s\t%c\t%d\t %c\t%15s\n", (p->people).id, (p->people).name, (p->people).sex, (p->people).fee, p->people.situation, (p->people).degree);p = p->next;}}p = head->next;if (bili2 >= 80)printf("本科全班缴费高于总学费的百分之80,为总学费的百分之%d不需要显示未缴清学费的学生\n", bili2);else{printf("本科全班缴费低于总学费的百分之80,为总学费的百分之%d\n", bili2);while (p != NULL){if (strcmp(p->people.degree, "undergraduate") == 0 && p->people.situation == 'N')printf("%10s\t%11s\t%c\t%d\t %c\t%15s\n", (p->people).id, (p->people).name, (p->people).sex, (p->people).fee, p->people.situation, (p->people).degree);p = p->next;}}p = head->next;if (bili3 >= 80)printf("研究生全班缴费高于总学费的百分之80,为总学费的百分之%d,不需要显示未缴清学费的学生\n", bili3);else{printf("研究生全班缴费低于总学费的百分之80,为总学费的百分之%d\n", bili3);while (p != NULL){if (strcmp(p->people.degree, "postgraduate") == 0 && p->people.situation == 'N')printf("%10s\t%11s\t%c\t%d\t %c\t%15s\n", (p->people).id, (p->people).name, (p->people).sex, (p->people).fee, p->people.situation, (p->people).degree);p = p->next;}}return 0;
}
int search(linklist *head)//9.查询 所有欠费学生信息
{int n = 0;linklist*p; p = head->next;printf("\n------------------所有欠费学生信息------------------\n");while (p != NULL){if (p->people.situation == 'N'){n++;printf("%10s\t%11s\t%c\t%d\t %c\t%15s\n", (p->people).id, (p->people).name, (p->people).sex, (p->people).fee, p->people.situation, (p->people).degree);}p = p->next;}printf("一共有%d个学生欠费\n\n", n);
}
int require_search(linklist *head)//10.按条件查询欠费学生信息
{linklist*p; p = head->next;char n;printf("请输入你想查询的欠费学生性别:M男生 F女生 //输入M或F\n");cin >> n;while (p != NULL){switch (n){case 'F':if (p->people.sex == 'F'&&p->people.situation == 'N')printf("%10s\t%11s\t%c\t%d\t %c\t%15s\n", (p->people).id, (p->people).name, (p->people).sex, (p->people).fee, p->people.situation, (p->people).degree);break;case 'M':if (p->people.sex == 'M'&&p->people.situation == 'N')printf("%10s\t%11s\t%c\t%d\t %c\t%15s\n", (p->people).id, (p->people).name, (p->people).sex, (p->people).fee, p->people.situation, (p->people).degree);break;defult:printf("输入错误!!!\n");}p = p->next;}return 0;
}
int display(linklist *head)//11.显示你想知道的学生信息
{linklist*p; p = head->next;char a[20];int n = 0, i = 0;printf("请输入你想查询的学生的学号或姓名\n");scanf("%s", a);n = find(head, a);if (n == -1)printf("没有找到,您是否输错?\n");else{for (i = 0; i < n; i++)p = p->next;printf("%10s\t%11s\t%c\t%d\t %c\t%15s\n", (p->people).id, (p->people).name, (p->people).sex, (p->people).fee, p->people.situation, (p->people).degree);}return 0;
}
int find(linklist*head, char a[20])
{linklist *p;p = head->next;int i = 0;for (i = 0; i < num; i++, p = p->next){if ((!strcmp(p->people.id, a)) || (!strcmp(a, p->people.name)))return i;}return -1;
}
int panduan(linklist*head, linklist*q)
{if (strcmp(q->people.degree, "junior") == 0){if (q->people.fee < 10000)q->people.situation = 'N';elseq->people.situation = 'Y';num1++;num++;really_money1 += q->people.fee;}if (strcmp(q->people.degree, "undergraduate") == 0){if (q->people.fee < 8000)q->people.situation = 'N';elseq->people.situation = 'Y';num2++;num++;really_money2 += q->people.fee;}if (strcmp(q->people.degree, "postgraduate") == 0){if (q->people.fee < 5600)q->people.situation = 'N';elseq->people.situation = 'Y';num3++;num++;really_money3 += q->people.fee;}
}
int output(linklist*head)
{linklist*p; p = head->next;printf("---------------------------------专科学生-------------------------------\n");while (p != NULL){if (strcmp(p->people.degree, "junior") == 0)printf("%10s\t%11s\t%c\t%d\t %c\t%15s\n", (p->people).id, (p->people).name, (p->people).sex, (p->people).fee, p->people.situation, (p->people).degree);p = p->next;}p = head->next;printf("---------------------------------本科学生-------------------------------\n");while (p != NULL){if (strcmp(p->people.degree, "undergraduate") == 0)printf("%10s\t%11s\t%c\t%d\t %c\t%15s\n", (p->people).id, (p->people).name, (p->people).sex, (p->people).fee, p->people.situation, (p->people).degree);p = p->next;}printf("---------------------------------研究生---------------------------------\n");p = head->next;while (p != NULL){if (strcmp(p->people.degree, "postgraduate") == 0)printf("%10s\t%11s\t%c\t%d\t %c\t%15s\n", (p->people).id, (p->people).name, (p->people).sex, (p->people).fee, p->people.situation, (p->people).degree);p = p->next;}
}
班级缴费信息管理系统相关推荐
- C++大作业--班级同学信息管理系统
在这个学期,老师布置了C++课程程序设计报告 题目如下: 所设计的班级同学信息管理系统应具有以下功能: 1.登录功能:登录该系统时需要输入登录密码,默认的密码是666,可修改登录密码. 2.数据输入功 ...
- C#学生信息管理系统
项目视频课:https://edu.csdn.net/course/detail/27107 题目:学生信息管理系统 语言和环境 语言:C#,WinForms 环境:Visual Studio 201 ...
- 幼儿园班级信息管理系统
#include<iostream> #include<fstream> #include<cstring> #define N 1000 using namesp ...
- 专利缴费信息网上补充及管理系统--操作指南
2019独角兽企业重金招聘Python工程师标准>>> 专利缴费信息网上补充及管理系统 操作指南 一. 专利缴费信息网上补充及管理系统介绍 专利缴费信息网上补充及管理系统( ...
- 基于java与sqlserver2008的班级信息管理系统源代码,图书管理系统课程设计报告(基于JAVA和SQL.Server).doc...
可编辑版 PAGE Word完美格式 可编辑版 Word完美格式 课程设计报告 设计名称:<数据库原理与应用>课程设计 设计题目: 图书管理系统的设计与开发 学生学号: 专业班级: 学生姓 ...
- 基于jsp的中学班级信息管理系统
该中学类班级管理系统包括了学生信息管理.学生成绩管理.学生出勤率管理.教师信息管理和班级课程管理等主要管理模块,是一个相对全面且通用的班级系统,系统开发技术有Myeclipse,tomcat,mysq ...
- 基于c++的班级信息管理系统【附源码】
源码.答辩PPT.文档地址: 基于c++的班级信息管理系统.zip-C++文档类资源-CSDN下载本项目采用面向对象分析作为主要的系统建模方法,使用UML作为建模语言,从几个角度对系统建立模型.系统更 ...
- ssm班级毕业纪念册管理系统-javweb同学录管理系统代码-班级合照纪念信息管理系统Java项目
ssm班级毕业纪念册管理系统-javweb同学录管理系统代码-班级合照纪念信息管理系统Java项目 注意:该项目只展示部分功能,如需了解,评论区咨询即可. 作者:IT跃迁谷 1.开发环境 开发语言:J ...
- C#毕业设计——基于C#+asp.net+sqlserver的学生信息管理系统设计与实现(毕业论文+程序源码)——学生信息管理系统
基于C#+asp.net+sqlserver的学生信息管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于C#+asp.net+sqlserver的学生信息管理系统设计与实现,文章末尾 ...
最新文章
- node 压缩模块速成
- ZOJ 1423 (Your)((Term)((Project))) (模拟+数据结构)
- java中堆栈(stack)和堆(heap)
- sql语句的一些细节东西学起来还是很费劲的,希望以后注意下。算是经验吧
- HTML中关于图像和表格,链接等的知识
- Elasticsearch生态技术峰会 | 阿里云Elasticsearch云原生内核
- eclipse 基础设置
- 【Java从0到架构师】RocketMQ 使用 - 发送消息、接收消息、特殊消息
- mysql maria引擎_MySQL/mariadb知识点——存储过程及存储引擎
- PHP如何获取txt中的文字
- 阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_06.mybatis的环境搭建
- [深度学习]图片的几种读写方式以及相互转换
- 电路自学2-储能元件(电容+电感+储能元件的串并联)
- 汽车洒水器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- Solidity语言详解——view和pure函数的使用区别
- npm 安装vue脚手架报错警告npm WARN deprecated
- matlab括号不对称,关于matlab的Error: Unbalanced or misused parentheses or brackets.什么意思?...
- java smart单点登录_SmartBi 单点登录的实现
- 综述阅读:人工智能在肺癌影像基因组学方面的研究与进展
- win8/win8.1提示在关闭了用户控制的情况下 无法打开这个应用