学生缴费注册系统的开发

2024-06-02 21:32

本文主要是介绍学生缴费注册系统的开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*包含必要的头文件*/typedef struct student
{int cno;//班号int sno;//学号char name[20];//姓名char sex[12];//性别float money[3];//应缴  实缴  找零
}Stu;//学生结构体int read(Stu s[])//文件读
{FILE *fp;int i = 0;if ((fp = fopen("student.txt", "r+")) == NULL)//‘r’允许读 打开文件 如果打开失败 返回0{return 0;}while (!feof(fp))//当文件没有读取到末尾 循环读取到数组{fscanf(fp,"%d%d%s%s%f%f%f",&s[i].cno,&s[i].sno,s[i].name,s[i].sex,&s[i].money[0],&s[i].money[1],&s[i].money[2]);i++;//数组每次长度+1}fclose(fp);		//关闭文件return i;//返回读取到的数组长度
}void write(Stu s[],int n)//文件写
{FILE *fp;int i;if(n==0)return;//如果没有记录  不需要写入if ((fp = fopen("student.txt", "w+")) == NULL)//打开文件 打开失败则返回 w+:会自动创建新文件或者覆盖旧文件{return;}for (i = 0; i < n-1; i++)//循环写入文件{fprintf(fp,"%-10d %-10d %-10s %-10s %-10f %-10f %-10f\n",s[i].cno,s[i].sno,s[i].name,s[i].sex,s[i].money[0],s[i].money[1],s[i].money[2]);}//最后一行不写入回车 不然读取的时候会读取一行乱码fprintf(fp,"%-10d %-10d %-10s %-10s %-10f %-10f %-10f",s[i].cno,s[i].sno,s[i].name,s[i].sex,s[i].money[0],s[i].money[1],s[i].money[2]);fclose(fp);										//关闭文件
}/*添加新学生缴费信息*/
int addnew(Stu s[],int n)
{system("cls");printf("请输入班级:");scanf("%d",&s[n].cno);//直接放在数组尾部s[n]printf("请输入学号:");scanf("%d",&s[n].sno);printf("请输入姓名:");scanf("%s",s[n].name);printf("请输入性别:");scanf("%s",s[n].sex);printf("请输入应缴金额:");scanf("%f",&s[n].money[0]);printf("请输入实缴金额:");scanf("%f",&s[n].money[1]);s[n].money[2]=s[n].money[1]-s[n].money[0];//自动计算找零printf("录入成功!\n");system("pause");return n+1;//缴费记录加1
}/*显示全部学生缴费信息*/
void display(Stu s[],int n)
{int i;system("cls");printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n","班级","学号","姓名","性别","应缴金额","实缴金额","找零金额");for(i=0;i<n;i++){printf("%-10d%-10d%-10s%-10s%-10.2f%-10.2f%-10.2f\n",s[i].cno,s[i].sno,s[i].name,s[i].sex,s[i].money[0],s[i].money[1],s[i].money[2]);}system("pause");/*暂停屏幕函数*/
}
/*菜单  让用户观看*/
void menu()
{printf("1:添加缴费记录\n");printf("2:查看缴费记录\n");printf("3:删除缴费记录\n");printf("4:查询缴费记录\n");printf("5:统计缴费记录\n");printf("0:退出\n");printf("请输入选项:");
}/*删除学生缴费信息*/
int delRecord(Stu s[],int n)
{int i,cno,sno,flag=0;system("cls");printf("请输入要删除的班号以及学生编号:");scanf("%d%d",&cno,&sno);for(i=0;i<n;i++){if(s[i].cno==cno&&s[i].sno==sno)//判断学号和班级号是否一致{flag=1;//记录找到过记录printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n","班级","学号","姓名","性别","应缴金额","实缴金额","找零金额");printf("%-10d%-10d%-10s%-10s%-10.2f%-10.2f%-10.2f\n",s[i].cno,s[i].sno,s[i].name,s[i].sex,s[i].money[0],s[i].money[1],s[i].money[2]);}}if(flag==0)//如果没找到{printf("无该学生缴费记录!\n");system("pause");return n;}for(i;i<n;i++)//按次序覆盖删除 就是用每一个元素的后一个元素 覆盖自己 1 2 3变成 2 3 3 长度-1 变成2 3s[i]=s[i+1];printf("删除成功!\n");system("pause");/*暂停屏幕函数*/return n-1;//长度-1
}/*查询学生缴费信息*/
void find(Stu s[],int n)
{int i,cno,sno,flag=0;system("cls");printf("请输入要查询的班号以及学生编号:");scanf("%d%d",&cno,&sno);for(i=0;i<n;i++){if(s[i].cno==cno&&s[i].sno==sno){flag=1;printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n","班级","学号","姓名","性别","应缴金额","实缴金额","找零金额");printf("%-10d%-10d%-10s%-10s%-10.2f%-10.2f%-10.2f\n",s[i].cno,s[i].sno,s[i].name,s[i].sex,s[i].money[0],s[i].money[1],s[i].money[2]);}}if(flag==0){printf("无该学生缴费记录!\n");system("pause");}system("pause");/*暂停屏幕函数*/
}/*统计学生缴费信息*/
void total(Stu s[],int n)
{int i;float sum=0;system("cls");for(i=0;i<n;i++){sum+=s[i].money[0];//累加所有的金额}printf("共有%d条缴费记录\n",n);printf("共计收费%.2f元\n",sum);system("pause");/*暂停屏幕函数*/
}/*主函数*/
int main()
{int choice;Stu stu[100];int n=read(stu);//读取文件数据do{system("cls");menu();scanf("%d",&choice);switch(choice)//根据选择进入相应的功能{case 1:n=addnew(stu,n);break;case 2:display(stu,n);break;case 3:n=delRecord(stu,n);break;case 4:find(stu,n);break;case 5:total(stu,n);break;}}while(choice!=0);write(stu,n);//写入文件return 0;
}

这篇关于学生缴费注册系统的开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1025138

相关文章

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作