校园缴费平台设计
实践内容:设计一套校园学杂费管理系统,具有输入、修改、缴费、删除学生信息的功能,用系统菜单进行管理。
要求:
(1)、新生信息的录入。包括姓名、学号、联系电话、寝室号、应缴纳学费金额。
(3)、信息查询。可以根据学生的学号进行信息查询,并显示其信息。
(4)、信息添加。可添加新进学生的信息,可以同时添加多位学生的信息。
(5)、修改新生信息的功能。修改前应填写系统管理员密码,密码正确才可以进行信息修改。
(6)、缴费功能。输入学生学号可查询学生应缴纳学杂费情况并进行缴费,支持多次分批缴费。缴费后提示成功并更新信息。
(7)、删除学生信息的功能。修改前应填写系统管理员密码,密码正确才可以进行信息删除。如学生处于欠费状态应进行系统提示,显示无法删除。
(8)、统计功能。能够分别按照欠费金额和缴费金额对学生信息进行排序,在排序最后一行分别显所有学生的欠费总额和缴费总额。
#include
#include
#include
#include
#define N 1000
char password[] = “12345”;
typedef struct Student{
char No[50]; //学号
char Name[50]; //姓名
char Tel[50]; //电话
char Addree[50]; //宿舍号
int Cost; //应缴纳学费金额
int HasSummit; //已经缴纳的金额
}Student;
void meau(){
time_t timep;
time(&timep);
printf(“电子信息工程二班-丁儒枫-2220171544-%s\n”,ctime(&timep));
printf("****** 校园缴费平台 \n");
printf(" 菜单管理 \n");
printf(" 1.信息录入 \n");
printf(" 2.信息显示 \n");
printf(" 3.信息查询 \n");
printf(" 4.信息添加 \n");
printf(" 5.信息修改 \n");
printf(" 6.缴费功能 \n");
printf(" 7.信息删除 \n");
printf(" 8.统计功能 \n");
printf(" 0.退出系统 ******\n");
}
//打印功能的菜单函数
void meauPrint(){
printf("@@@@@@ 1.学生信息浏览 @@@@@@\n");
printf("@@@@@@ 0.返回上层菜单 @@@@@@\n");
}
//打印学生信息的表头
void printHead(){
printf("%-6s%-8s%-16s%-10s%-20s\n",“学号”,“姓名”,“电话”,“宿舍号”,“应缴纳学费金额”);
}
//输出学生信息
void printStudent(Student student[],int n){
int i;
for(i = 0; i < n; ++i){
printf("%-6s%-8s%-16s%-10s%-20d\n",student[i].No,student[i].Name,student[i].Tel,student[i].Addree,student[i].Cost);
}
}
//该函数完成根据信息浏览功能
void printManage(Student student[],int n){
int i;
int choice; //用户的选择
do{
meauPrint(); ///显示子菜单
printf(“请选择功能\n”);
scanf("%d",&choice);
switch(choice){
case 1:
printHead();
printStudent(student,n);
break;
case 0:
break;
}
system(“pause”);
system(“cls”);
}while(choice);
}
//输入功能的菜单函数
void meauInput(){
printf("@@@@@@ 1.手动录入 @@@@@@\n");
printf("@@@@@@ 0.返回上层菜单 @@@@@@\n");
}
//手动录入
int add(Student student[], int n){
int num = 0;
int i = 0;
printf(“请输入本次添加学生的人数\n”);
scanf("%d",&num);
//输入学号
printf(“请输入各个学生的学号,以空格隔开\n”);
for(i = 0; i < num; ++i){
scanf("%s",student[n+i].No);
}
//输入姓名
printf(“请输入各个学生的姓名,以空格隔开\n”);
for(i = 0; i < num; ++i){
scanf("%s",student[n+i].Name);
}
//输入电话
printf(“请输入各个学生的电话,以空格隔开\n”);
for(i = 0; i < num; ++i){
scanf("%s",student[n+i].Tel);
}
//输入宿舍号
printf(“请输入各个学生的宿舍号,以空格隔开\n”);
for(i = 0; i < num; ++i){
scanf("%s",&student[n+i].Addree);
}
//输入应缴纳学费金额
printf(“请输入各个学生的应缴纳学费金额,以空格隔开\n”);
for(i = 0; i < num; ++i){
scanf("%d",&student[n+i].Cost);
}
for(i = 0; i < num; ++i){
student[n+i].HasSummit = 0;
}
printf(“添加成功!\n”);
//saveFile(student,n+num);
return n+num;
}
//该函数完成根据信息读取功能
int readManage(Student student[],int n){
int i;
int choice;
do{
meauInput(); ///显示子菜单
printf(“请选择功能\n”);
scanf("%d",&choice);
switch(choice){
/case 1:
n = readFile(student);
printf(“学生信息输入完毕\n”);
printf(“一共读入了%d个学生信息\n”,n);
break;/
case 1:
n = add(student,n);
break;
case 0:
break;
}
system(“pause”);
system(“cls”);
}while(choice);
return n;
}
//添加功能的菜单
void meauAdd(){
printf("@@@@@@ 1.添加学生 @@@@@@\n");
printf("@@@@@@ 0.返回上层菜单 @@@@@@\n");
}
//该函数完成添加功能
int addManage(Student student[], int n){
int i;
int choice; //用户的选择
do{
meauAdd(); ///显示子菜单
printf(“请选择功能\n”);
scanf("%d",&choice);
switch(choice){
case 1:
n = add(student,n);
break;
case 0:
break;
}
system(“pause”);
system(“cls”);
}while(choice);
return n;
}
//查询功能的菜单函数
void meauFind(){
printf("@@@@@@ 1.按学号查询 @@@@@@\n");
printf("@@@@@@ 0.返回上层菜单 @@@@@@\n");
}
//判断两个字符数组是否相同,相同返回1,否则返回0
int Equal(char a[],char b[]){
int len1 = strlen(a);
int len2 = strlen(b);
int i = 0;
if(len1 != len2) return 0; //如果两个字符数组的长度不同,那么这两个数组肯定不会相同
for(i = 0;i < len1;++i) //如果有一个字符不相同,那么这两个字符数组不会相同
if(a[i] != b[i])
return 0;
return 1;
}
//按条件查询,condition为1表示按学号查找
int searchStudent(Student student[],int n,Student STUDENT,int condition){
int i;
//按学号查询
if(condition == 1){
for(i = 0; i < n; ++i){
if(Equal(STUDENT.No,student[i].No))
return i;
}
return -1;
}
}
//该函数完成根据条件查询功能
void searchManage(Student student[], int n){
int i;
int choice; //用户的选择
int Result; //查询的结果
Student STUDENT;
do{
meauFind(); ///显示子菜单
printf(“请选择功能\n”);
scanf("%d",&choice);
switch(choice){
case 1:
printf(“请输入学号\n”);
memset(STUDENT.No,0,sizeof(STUDENT.No));
scanf("%s",STUDENT.No);
Result = searchStudent(student,n,STUDENT,choice);
if(Result == -1)
printf(“不存在符合条件的学生\n”);
else{
printHead();
printf("%-6s%-8s%-16s%-10s%-20d\n",student[Result].No,student[Result].Name,student[Result].Tel,student[Result].Addree,student[Result].Cost);
}
break;
case 0:
break;
}
system(“pause”);
system(“cls”);
}while(choice);
}
//修改功能的菜单函数
void meauChange(){
printf("@@@@@@ 1.学生基本信息修改 @@@@@@\n");
printf("@@@@@@ 0.返回上层菜单 @@@@@@\n");
}
//依据电话删除学生
void changeStudent(Student student[], int n){
Student STUDENT;
int result;
printf(“请输入要修改的学生学号\n”);
scanf("%s",STUDENT.No);
result = searchStudent(student,n,STUDENT,1);
if(result == -1){ //不存在该学生
printf(“该学生不存在,修改失败!\n”);
return;
}
//输入学号
printf(“请修改学生的学号号\n”);
scanf("%s",student[result].No);
//输入姓名
printf(“请修改学生的姓名\n”);
scanf("%s",student[result].Name);
//输入电话
printf(“请修改学生的电话\n”);
scanf("%s",student[result].Tel);
//输入宿舍号
printf(“请修改学生的宿舍号\n”);
scanf("%s",student[result].Addree);
//输入应缴纳学费金额
printf(“请修改学生的应缴纳学费金额\n”);
scanf("%d",&student[result].Cost);
student[result].HasSummit = 0;
printf(“修改成功!\n”);
//saveFile(student,n-1);
}
//该函数完成信息修改功能
void changeManage(Student student[], int n){
int i;
int choice;
char input[100]; //用户输入的密码
do{
meauChange(); ///显示子菜单
printf(“请选择功能\n”);
scanf("%d",&choice);
switch(choice){
case 1:
while(1){
printf(“请输入管理员密码!\n”);
memset(input,0,sizeof(input)); //清空密码框
scanf("%s",input);
if(Equal(input,password) == 1) //密码正确,跳出循环
break;
printf(“密码错误,请重新输入\n”);
}
changeStudent(student,n);
break;
case 0:
break;
}
system(“pause”);
system(“cls”);
}while(choice);
}
//删除功能的菜单函数
void meauDel(){
printf("@@@@@@ 1.依据学号进行删除 @@@@@@\n");
printf("@@@@@@ 0.返回上层菜单 @@@@@@\n");
}
//依据学号删除学生
int delStudentByNo(Student student[],int n){
int i,j;
Student STUDENT;
printf(“请输入要删除的学生的学号\n”);
scanf("%s",STUDENT.No);
i = searchStudent(student,n,STUDENT,1);
if(i == -1){ //不存在该学生
printf(“该学生不存在,删除失败!\n”);
return n;
}
if(student[i].Cost > 0){
printf(“该学生处于欠费状态,无法删除\n”);
return -1;
}
for(j = i; j < n-1; ++j) //通过后面的学生覆盖前面的方式 进行删除
student[j] = student[j+1];
printf(“删除成功!\n”);
//saveFile(student,n-1);
return n-1; //更新学生个数
}
//该函数完成信息删除功能
int delManage(Student student[], int n){
int i,choice;
int result;
char input[100];
Student STUDENT;
do{
meauDel(); ///显示子菜单
printf(“请选择功能\n”);
scanf("%d",&choice);
switch(choice){
case 1:
while(1){
printf(“请输入管理员密码!\n”);
memset(input,0,sizeof(input)); //清空密码框
scanf("%s",input);
if(Equal(input,password) == 1) //密码正确,跳出循环
break;
printf(“密码错误,请重新输入\n”);
}
result = delStudentByNo(student,n);
if(result != -1) //如果成功删除,则更新学生人数
n = result;
break;
case 0:
break;
}
system(“pause”);
system(“cls”);
}while(choice);
return n;
}
//缴费功能的菜单函数
void meauSubmit(){
printf("@@@@@@ 1.进行缴费 @@@@@@\n");
printf("@@@@@@ 0.返回上层菜单 @@@@@@\n");
}
void Submit(Student student[], int n, Student STUDENT){
int Result; //查询结果
int order; //用户命令
int summit; //本次缴费金额
Result = searchStudent(student,n,STUDENT,1);
if(Result == -1)
printf(“不存在该学生!\n”);
else{
if(student[Result].Cost > 0){
while(1){
printf(“该学生还应缴纳费用金额为:%d\n”,student[Result].Cost);
printf(“请问是否现在缴费(1表示现在缴费,0表示现在不缴费)?\n”);
scanf("%d",&order);
if(order == 1){
printf(“请输入本次缴费金额\n”);
scanf("%d",&summit);
student[Result].Cost -= summit; //进行缴费
student[Result].HasSummit += summit;
if(student[Result].Cost < 0)
student[Result].Cost = 0;
}
if(order == 0) break;
if(student[Result].Cost == 0){
printf(“缴费成功\n”);
break;
}
}
}else{
printf(“该学生无需缴费!\n”);
return;
}
}
}
//该函数完成缴费功能
void submitManage(Student student[], int n){
int choice;
char input[100]; //用户输入的密码
Student STUDENT;
do{
meauSubmit(); ///显示子菜单
printf(“请选择功能\n”);
scanf("%d",&choice);
switch(choice){
case 1:
printf(“请输入要缴费的学生学号\n”);
scanf("%s",STUDENT.No);
Submit(student,n,STUDENT);
break;
case 0:
break;
}
system(“pause”);
system(“cls”);
}while(choice);
}
//统计功能的菜单函数
void meauSum(){
printf("@@@@@@ 1.按欠费金额进行排序 @@@@@@\n");
printf("@@@@@@ 2.按缴费金额进行排序 @@@@@@\n");
printf("@@@@@@ 0.返回上层菜单 @@@@@@\n");
}
//按照欠费金额进行排序
void Sum_1(Student student[], int n){
int i,j;
Student temp;
for(i = 1; i < n; ++i) //插入排序
for(j = i-1; j >= 0&& student[j].Cost > student[j+1].Cost; --j){
temp = student[j]; //交换下标为j和下标为j+1的位置
student[j] = student[j+1];
student[j+1] = temp;
}
printf(“排序完毕\n”);
printf("%-6s%-8s%-20s\n",“学号”,“姓名”,“应缴纳学费金额”);
for(i = 0; i < n; ++i){
printf("%-6s%-8s%-20d\n",student[i].No,student[i].Name,student[i].Cost);
}
}
//按照缴费金额进行排序
void Sum_2(Student student[], int n){
int i,j;
Student temp;
for(i = 1; i < n; ++i) //插入排序
for(j = i-1; j >= 0&& student[j].HasSummit > student[j+1].HasSummit; --j){
temp = student[j]; //交换下标为j和下标为j+1的位置
student[j] = student[j+1];
student[j+1] = temp;
}
printf(“排序完毕\n”);
printf("%-6s%-8s%-20s\n",“学号”,“姓名”,“已缴纳学费金额”);
for(i = 0; i < n; ++i){
printf("%-6s%-8s%-20d\n",student[i].No,student[i].Name,student[i].HasSummit);
}
}
//该函数完成缴费功能
void sumManage(Student student[], int n){
int choice;
Student STUDENT;
do{
meauSum(); ///显示子菜单
printf(“请选择功能\n”);
scanf("%d",&choice);
switch(choice){
case 1:
Sum_1(student,n);
break;
case 2:
Sum_2(student,n);
break;
case 0:
break;
}
system(“pause”);
system(“cls”);
}while(choice);
}
//将结构体数组的内容写入文件
void saveFile(Student student[], int n){
FILE *fp;
int i = 0;
if((fp = fopen(“in.txt”,“w+”)) == NULL){ //以写的方式打开指定文件
printf(“无法打开文件\n”); //打开失败,输出提示信息
exit(0); //然后退出
}
for(i = 0;i < n-1; ++i)
fprintf(fp,"%s %s %s %s %d\n",student[i].No,student[i].Name,student[i].Tel,student[i].Addree,student[i].Cost);
fprintf(fp,"%s %s %s %s %d",student[n-1].No,student[n-1].Name,student[n-1].Tel,student[n-1].Addree,student[n-1].Cost);
fclose(fp); //关闭文件
printf(“保存成功!\n”);
system(“pause”);
system(“cls”);
}
//主控模板,对应于菜单各个功能的选择执行
int runMain(Student student[], int n,int choice){
switch(choice){
case 1:
n = readManage(student,n);
break;
case 2:
printManage(student,n);
break;
case 3:
searchManage(student,n);
break;
case 4:
n = addManage(student,n);
break;
case 5:
changeManage(student,n);
break;
case 6:
submitManage(student,n);
break;
case 7:
n = delManage(student,n);
break;
case 8:
sumManage(student,n);
break;
case 0:
break;
}
return n;
}
int main(){
Student student[N]; //定义结构体数组存储学生信息
int choice;
int n = 0;
do{
meau(); //显示顶层菜单函数
printf(“请选择功能\n”);
scanf("%d",&choice);
if(choice < 0 || choice > 8)
printf(“错误选择,请重新选择”);
else{
system(“pause”);
system(“cls”);
n = runMain(student,n,choice);
if(n == 0){
printf(“没有任何的学生信息,请将学生信息输入至文件中\n”);
break;
}
}
}while(choice);
if(n != 0) saveFile(student,n);
return 0;
}