C语言题目:编写程序,对本宿舍的财务收入和支出情况进行管理(财务信息的浏览、财务变动信息的录入、财务信息的查询、财务信息的删除)。所开发的系统应该包括以下几个模块:1.菜单选择模块(选择所要进行的操作)2.收入和支出情况录入模块(录入时要求要录入年、月、日、姓名、金额、收入or支出、资金来源或去处)3.浏览模块(显示总的支出和收入、当前余额、明细)4.查询模块(查询收入和支出明细)5.信息删除模块(用于删除财务信息,需要先查找,再删除)6.退出系统界面
可以试试
#ifndef__STATEMENT_H__
#define__STATEMENT_H__
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#include<math.h>
#include<mmsystem.h>
#define BYTE unsigned char
#define DWORD unsigned long
#define LENGTH 20
typedef struct ID //用来存放数据在文件中的位置
{
DWORD IdNumber;
struct ID*pNext;
}ID;
typedef struct TIME
{
DWORD year,
DWORD month;
DWORD day:
}TIME;
typedef struct SPENDING //支出结构体
{
char ObjName[LENGTH]; //支出对象名
TIME time; //时间
char place[LENGTH]: //地点
char reason[LENGTH]; //原因
char Pay Way[LENGTH]; //交易方式
float money; //金额
struct SPENDING*pNext; //自类型指针
}SPENDING;
typedef struct USER //用户结构体
{
char Username[ LENGTH]; //用户名
har Userkey [LENGTH]; //用户密码
char Userquc[ LENGTH]; //用户密保
char Userans[LENGTH]; //密保答案
char dormitory[LENGTH]; //宿含名
}USER;
typedef struct DORMITORY //宿舍结构体
har dormitory[ LENGTH; //宿舍名
DWORD nmembers; //成员数
USER* members; //宿舍成员
struct DORMITORY*pNext;
}DORMITORY;
/*****************************************************************/
/**体界面函数**/
void Initate();
USER UserStartPage();
void MessagesTartPage(USER curUser);
/*****************************************************************/
/**用户操作函数**/
USER Login(); //用户登录
void Enroll(); //用户注册
void DeleteUer(); //删除用户
void ListUer(); //用户查询
void ChangeKy(); //修改密码
void FindKey(); //找回密码
void AboutFmdmMS(); //关于宿舍财务管理系统( the financial management system of dormitories)
/*****************************************************************/
/**信息操作函数**/
void DorSendinfoMUSER curser);//本月宿舍支出查询
void DorspendinfH(USER curser);//宿舍支出历史记录查询
void Perspendinfo(USER curser);//本月个人支出查询
ID* Perspendinfoh(USER curser);//个人支出历史记录查询
void Write Newspendinfo( USER curser);//新支出
void Changespendinfo( USER curser;//修改支出信息
void Deletespendinfo( USER curser);//删除支出信息
void Updataspendhistory( USER curser);//更新支出历史记录
/*****************************************************************/
#include "statement.h"
USER Login()//用户登录
{
system("title用户登录");
system("cls");
printf("\t\t\t***欢迎使用宿舍管理系统***\n");
printf("t\t\t\t <用户登录>\n");
/*************************************************************/
/**用户登录输入**/
USER curUser;
printf("\n请输入您的宿舍号:");
scanf("%19s",curUser.UserName);
whild(getchar()!='\n');
printf("\n请输入您的用户密码:");
scanf("%19s",curUser.UserKey);
whild(getchar()!='\n');
/**************************************************************/
/**用户匹配**/
DORMITORY head;
head. members=NULL;
head. pNext=NULL;
readUser(&head); //输入用户信息
if(head. pNext==NULL)
{
printf("\n不存在此用户!\n请检查您输入的信息是否有误!请重新输入!!\n");
strcpy(curser dormitory, "NoSuchUser\n")
printf("n请按任意键继续!\n");
getchar();
return curUser;
}
DORMITORY* pTail=head. pNext;
BYTE flag=0;//标识密码是否匹配成功
while(pail! =NULL && !flag)
{
if(strcmp(pTail->dormitory,curUser.dormitory)==0)//匹配宿舍
{
for (DWORD i=0; i<pTail->nMember && !flag; i++)
{
if (strcmp(pTail->member[i].UserName,curUser.UserName)==0)//匹配用户
{
if (strcmp(pTail->member[i].UserKey,curUser.UserKey)==0)//匹配密码
{
strcpy(curUser.UserQue,pTail->members[i].UserQue);
strcpy(curUser.UserQue,pTail->members[i].UserQue);
}
else
{
printf("\n密码错误!\n");
strcpy(curUser.dormitory,"NoSuchUser\0");
Sleep(200);
}
flag=1;
}
}
}
pTail=pTail->pNext;
}
if (!flag)
{
printf("\n不存在此用户!\n请检查您输入的信息是否有误!请重新输入!!\n");
releasedorlist (&head);
memset(&curser, 0, sizeof(curser));
strcpy(curser dormitory, Nosuchuser\0);
printf(n请按任意键继续!n");
getchar();
return curser;
}
releasedorlist(&head);//释放宿舍链表
return curser;
}
void Enroll()//用户注册
{
system(" title用户注册");
system("cls");
printf("\t\t\t ***欢迎使用宿舍财务管理系统***\n");
printf("\t\t\t\t<用户注册>\n");
/**************************************************************************/
/**新用户信息输入**/
USER curser;
memset(&curser, 0, sizeof(curser));
userinfolnput(& curser);//用户信息输入
/*****************************************************************************/
/**用户信息录入**/
DORMITORY head;/宿舍链表头节点
head. members =NULL;
head. pnext NULL;
readuser(&head);//读取所有用户信息
DORMITORY* pail;
BYTE flag=0;//添加用户是否成功的标志
for( pail=head. pnext: pail!l=NULL; pail= pail-> pnext)//如果已存在该宿舍,则在该宿舍下添加该用户
{
if( strcmp( curser. dormitory, pail-> dormitory)=0)/匹配宿含
{
Tail->members=
(USER* )realloc(ptail->members, sizeof(USER)*(ptail->nmembers+1));//用户信息赋值
usercopyto(&(ptail->members [ptaii->nmembers]),&curuser);
ptaii->members++
flag=1
}
}
if(!flag)//如果该宿舍尚未存在,则创建新宿舍
{
printf("宿舍注册成功!\n");
pail=&head;
while( pail-> pnext!=NULL)//指向尾节点
pail=ptail->pnext;
DORMTTORY*pNew=NULL;//创建宿舍新节点
pnew =(DORMITORY*)malloc(sizeof(DORMITORY));
if(pnew==NULL)
{
printf("\n宿舍注册失败!\n");
releasedorlist(&head);//释放宿舍链表
Sleep(100);
return;
}/*
memset(pnew->dormitory, 0, sizeof(char)*LENGTHD);
pnew->nmembers=0;
pnew->members=NULL;
PNEW->pnext=NULL: */
memset(pnew, 0, sizeof(DORMITORY) );
strcpy(pNew-> dormitory, curser. dormitory);//复制宿舍名
pNew-> members=(USER*) malloc( sizeof(USER));//创建用户新节点
if(pnew==NULL)
{
printf(("\n注册失败!\n");
releasedorlist(&head);//释放宿舍链表
Sleep(100);
return;
}
pnew->nmembers= 1;//用户信息赋值
usercopyto(pnew->members, &curser);
ptail->pnext=pnew;
}
writelser(&head);//写入用户信息
releasedorlist(&head);//释放链表
printf("\n用户注册成功!\n")
Sleep(200)
}
void Deletelser()//删除用户
{
system(" title别除用户");
system("cls");
printf("t\t\t***欢迎使用宿舍财务管理系统***\n");
printf("t\t\t\t <用户删除>\n");
/***********************************************************/
/**本删除用户输入**/
char Dorname [LENGTH
Username [LENGTH
Rootkey [LENGTH
printf("n请输入要操作的宿舍名:")
scanf(%19s", Dorname)
while(getchar! =\n)
printf("\n请输入要删除的用户名:");
scanf("19s", Username);
while(getchar!()! ='\n');
printf("\n请输入舍长的用户密码:");
scanf("%19s", Rootkey);
while(getchar()!='\n');
#include <stdio.h>
#include <string.h>
#define MAX_RECORDS 1000 // 最大记录数
struct Record
{
int year;
int month;
int day;
char name[20];
int amount;
char type[5]; // "收入"或"支出"
char source[20];
};
struct Record records[MAX_RECORDS];
int numRecoreds = 0;
void ShowMenu(void);
void AddRecord(void);
void ViewRecords(void);
void SearchRecords(void);
void DeleteRecord(void);
int main(void)
{
int choice;
do
{
ShowMenu();
scanf("%d", &choice);
switch (choice)
{
case 1:
AddRecord();
break;
case 2:
ViewRecords();
break;
case 3:
SearchRecords();
break;
case 4:
DeleteRecord();
break;
case 5:
printf("谢谢使用!\n");
break;
default:
printf("无效的选项,请重新输入!\n");
break;
}
}
while (choice != 5);
return 0;
}
void ShowMenu(void)
{
printf("===============================\n");
printf("欢迎使用宿舍财务管理系统!\n");
printf("1. 录入财务信息\n");
printf("2. 浏览财务信息\n");
printf("3. 查询财务信息\n");
printf("4. 删除财务信息\n");
printf("5. 退出系统\n");
printf("请选择操作:");
}
void AddRecord(void)
{
struct Record r;
printf("请输入年、月、日、姓名、金额、收入or支出、资金来源或去处(以空格分隔):");
scanf("%d %d %d %s %d %s %s", &r.year, &r.month, &r.day, r.name, &r.amount, r.type, r.source);
records[numRecoreds] = r;
numRecoreds++;
printf("%s", r.type);
printf("财务信息已添加!\n");
}
void ViewRecords(void)
{
int total_income = 0;
int total_expense = 0;
printf("===================================\n");
printf("年 月 日 姓名 金额 类型 来源/去处\n");
printf("-----------------------------------\n");
for (int i = 0; i < numRecoreds; i++)
{
struct Record r = records[i];
printf("%4d %2d %2d %-10s %6d %-4s %-10s\n", r.year, r.month, r.day, r.name, r.amount, r.type, r.source);
if (strcmp(r.type, "收入") == 0)
{
total_income += r.amount;
}
else
{
total_expense += r.amount;
}
}
int balance = total_income - total_expense;
printf("-----------------------------------\n");
printf("总收入:%6d\n", total_income);
printf("总支出:%6d\n", total_expense);
printf("当前余额:%4d\n", balance);
}
void SearchRecords(void)
{
char name[20];
printf("请输入要查询的姓名:");
scanf("%s", name);
printf("===================================\n");
printf("年 月 日 姓名 金额 类型 来源/去处\n");
printf("-----------------------------------\n");
for (int i = 0; i < numRecoreds; i++)
{
struct Record r = records[i];
if (strcmp(r.name, name) == 0)
{
printf("%4d %2d %2d %-10s %6d %-4s %-10s\n", r.year, r.month, r.day, r.name, r.amount, r.type, r.source);
}
}
printf("-----------------------------------\n");
}
void DeleteRecord(void)
{
char name[20];
int index = -1;
printf("请输入要删除的财务信息的姓名:");
scanf("%s", name);
for (int i = 0; i < numRecoreds; i++)
{
struct Record r = records[i];
if (strcmp(r.name, name) == 0)
{
index = i;
break;
}
}
if (index == -1)
{
printf("未找到该财务信息!\n");
}
else
{
for (int i = index; i < numRecoreds - 1; i++)
{
records[i] = records[i + 1];
}
numRecoreds--;
printf("财务信息已删除!\n");
}
}
以下是一些思路,可供参考
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_RECORDS 1000 //最大记录数
#define MAX_NAME_LEN 20 //最大姓名长度
struct record { //单条财务记录结构体
int year;
int month;
int day;
char name[MAX_NAME_LEN];
float amount;
char type; //0代表支出,1代表收入
char source[50]; //资金来源或去处
};
struct record records[MAX_RECORDS]; //所有财务记录数组
int record_count = 0; //当前记录数
//菜单选择模块
int display_menu() {
int choice = 0;
printf("------------------------\n");
printf("1. 录入收支情况\n");
printf("2. 浏览财务信息\n");
printf("3. 查询财务明细\n");
printf("4. 删除财务信息\n");
printf("5. 退出\n");
printf("------------------------\n");
printf("请选择操作:");
scanf("%d", &choice);
return choice;
}
//收入和支出情况录入模块
void insert_record() {
struct record rec;
printf("请输入年、月、日(例如2021 8 5):");
scanf("%d%d%d", &rec.year, &rec.month, &rec.day);
printf("请输入姓名:");
scanf("%s", rec.name);
printf("请输入金额:");
scanf("%f", &rec.amount);
printf("请输入类型(0代表支出,1代表收入):");
scanf("%d", &rec.type);
printf("请输入资金来源或去处:");
scanf("%s", rec.source);
records[record_count] = rec;
record_count++;
printf("收支情况录入成功!\n");
}
//浏览模块
void display_records() {
float total_income = 0, total_expense = 0, balance = 0;
printf("收支记录如下:\n");
printf("------------------------------------------------------------------------------\n");
printf("%-10s %-10s %-10s %-10s %-10s %-10s %-10s\n", "年", "月", "日", "姓名", "金额", "类型", "资金来源或去处");
printf("------------------------------------------------------------------------------\n");
for (int i = 0; i < record_count; i++) {
struct record rec = records[i];
printf("%-10d %-10d %-10d %-10s %-10.2f %-10c %-10s\n", rec.year, rec.month, rec.day,
rec.name, rec.amount, rec.type == 1 ? '收':'支', rec.source);
if (rec.type == 1) {
total_income += rec.amount;
} else {
total_expense += rec.amount;
}
}
balance = total_income - total_expense;
printf("------------------------------------------------------------------------------\n");
printf("本月总收入:%.2f元,本月总支出:%0.2f元,当前余额:%.2f元\n", total_income, total_expense, balance);
}
//查询模块
void search_records() {
char name[MAX_NAME_LEN];
printf("请输入要查询的姓名:");
scanf("%s", name);
printf("查询结果如下:\n");
printf("------------------------------------------------------------------------------\n");
printf("%-10s %-10s %-10s %-10s %-10s %-10s %-10s\n", "年", "月", "日", "姓名", "金额", "类型", "资金来源或去处");
printf("------------------------------------------------------------------------------\n");
for (int i = 0; i < record_count; i++) {
struct record rec = records[i];
if (strcmp(rec.name, name) == 0) {
printf("%-10d %-10d %-10d %-10s %-10.2f %-10c %-10s\n", rec.year, rec.month, rec.day,
rec.name, rec.amount, rec.type == 1 ? '收':'支', rec.source);
}
}
printf("------------------------------------------------------------------------------\n");
}
//信息删除模块
void delete_record() {
char name[MAX_NAME_LEN];
printf("请输入要删除的姓名:");
scanf("%s", name);
int match_index = -1;
for (int i = 0; i < record_count; i++) {
struct record rec = records[i];
if (strcmp(rec.name, name) == 0) {
match_index = i;
break;
}
}
if (match_index == -1) {
printf("未找到匹配的记录,删除失败!\n");
return;
}
while (match_index < record_count - 1) {
records[match_index] = records[match_index + 1];
match_index++;
}
record_count--;
printf("删除成功!\n");
}
int main() {
int choice = 0;
while (1) {
choice = display_menu();
switch (choice) {
case 1:
insert_record();
break;
case 2:
display_records();
break;
case 3:
search_records();
break;
case 4:
delete_record();
break;
case 5:
printf("谢谢使用,再见!\n");
exit(0);
default:
printf("无效的操作,请重新选择!\n");
break;
}
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 财务记录结构体
typedef struct {
int year;
int month;
int day;
char name[50];
float amount;
char type[10];
char source[50];
} FinancialRecord;
// 全局变量
FinancialRecord records[100]; // 最多100条财务记录
int numRecords = 0; // 当前记录数
// 菜单选择模块
int showMenu() {
int choice;
printf("************ 宿舍财务管理系统 ************\n");
printf("1. 录入财务信息\n");
printf("2. 浏览财务信息\n");
printf("3. 查询财务信息\n");
printf("4. 删除财务信息\n");
printf("5. 退出系统\n");
printf("请选择操作:");
scanf("%d", &choice);
return choice;
}
// 收入和支出情况录入模块
void addRecord() {
FinancialRecord record;
printf("请输入财务信息:\n");
printf("年:");
scanf("%d", &record.year);
printf("月:");
scanf("%d", &record.month);
printf("日:");
scanf("%d", &record.day);
printf("姓名:");
scanf("%s", record.name);
printf("金额:");
scanf("%f", &record.amount);
printf("收入/支出(income/expense):");
scanf("%s", record.type);
printf("资金来源/去处:");
scanf("%s", record.source);
records[numRecords++] = record;
printf("财务信息录入成功!\n");
}
// 浏览模块
void viewRecords() {
float totalIncome = 0.0;
float totalExpense = 0.0;
float balance = 0.0;
printf("************ 宿舍财务浏览 ************\n");
printf("日期\t姓名\t金额\t类型\t来源/去处\n");
printf("--------------------------------------\n");
for (int i = 0; i < numRecords; i++) {
FinancialRecord record = records[i];
printf("%d-%02d-%02d\t%s\t%.2f\t%s\t%s\n", record.year, record.month, record.day, record.name, record.amount, record.type, record.source);
if (strcmp(record.type, "income") == 0) {
totalIncome += record.amount;
} else if (strcmp(record.type, "expense") == 0) {
totalExpense += record.amount;
}
}
balance = totalIncome - totalExpense;
printf("--------------------------------------\n");
printf("总收入:%.2f\n", totalIncome);
printf("总支出:%.2f\n", totalExpense);
printf("当前余额:%.2f\n", balance);
}
// 查询模块
void searchRecords() {
char name[50];
printf("请输入要查询的姓名:");
scanf("%s", name);
printf("************ 查询结果 ************\n");
printf("日期\t姓名\t金额\t类型\t来源/去处\n");
printf("----------------------------------\n");
int found = 0;
for (int i = 0; i < numRecords; i++) {
FinancialRecord record = records[i];
if (strcmp(record.name, name) == 0) {
printf("%d-%02d-%02d\t%s\t%.2f\t%s\t%s\n", record.year, record.month, record.day, record.name, record.amount, record.type, record.source);
found = 1;
}
}
if (!found) {
printf("未找到该姓名的财务信息!\n");
}
}
// 信息删除模块
void deleteRecord() {
char name[50];
printf("请输入要删除的姓名:");
scanf("%s", name);
int found = 0;
for (int i = 0; i < numRecords; i++) {
FinancialRecord record = records[i];
if (strcmp(record.name, name) == 0) {
found = 1;
for (int j = i; j < numRecords - 1; j++) {
records[j] = records[j + 1];
}
numRecords--;
printf("财务信息删除成功!\n");
break;
}
}
if (!found) {
printf("未找到该姓名的财务信息!\n");
}
}
int main() {
int choice;
while (1) {
choice = showMenu();
switch (choice) {
case 1:
addRecord();
break;
case 2:
viewRecords();
break;
case 3:
searchRecords();
break;
case 4:
deleteRecord();
break;
case 5:
printf("谢谢使用,再见!\n");
exit(0);
default:
printf("无效的选项,请重新选择!\n");
break;
}
}
return 0;
}
参考GPT
下面是C语言的示例程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_RECORDS 100 // 最多记录数
struct record {
int year;
int month;
int day;
char name[100];
double amount;
char type[10]; // "income" or "outcome"
char fromto[100];
};
struct record records[MAX_RECORDS]; // 记录数组
int records_count = 0; // 记录总数
// 菜单选择模块
int menu()
{
printf("---------------------------------\n");
printf("1. 财务变动信息的录入\n");
printf("2. 财务信息的查询\n");
printf("3. 浏览财务信息\n");
printf("4. 删除财务信息\n");
printf("0. 退出\n");
printf("---------------------------------\n");
printf("请选择操作:");
int choice;
scanf("%d", &choice);
return choice;
}
// 录入模块
void input_record()
{
printf("请输入日期(年 月 日):");
int year, month, day;
scanf("%d %d %d", &year, &month, &day);
printf("请输入姓名:");
char name[100];
scanf("%s", name);
printf("请输入金额:");
double amount;
scanf("%lf", &amount);
printf("请输入收入支出类型(income或outcome):");
char type[10];
scanf("%s", type);
printf("请输入资金来源或去处:");
char fromto[100];
scanf("%s", fromto);
// 将记录添加到数组中
struct record r = {
.year = year,
.month = month,
.day = day,
.amount = amount,
};
strcpy(r.name, name);
strcpy(r.type, type);
strcpy(r.fromto, fromto);
records[records_count++] = r;
printf("记录已添加!\n");
}
// 查询模块
void query_record()
{
printf("请输入日期(年 月 日):");
int year, month, day;
scanf("%d %d %d", &year, &month, &day);
printf("请输入姓名:");
char name[100];
scanf("%s", name);
for (int i = 0; i < records_count; i++) {
if (records[i].year == year
&& records[i].month == month
&& records[i].day == day
&& strcmp(records[i].name, name) == 0) {
printf("日期:%d/%d/%d,姓名:%s,金额:%.2lf,类型:%s,资金来源或去处:%s\n",
records[i].year, records[i].month, records[i].day,
records[i].name, records[i].amount, records[i].type,
records[i].fromto);
return;
}
}
printf("没有找到匹配的记录!\n");
}
// 浏览模块
void show_records()
{
double total_income = 0, total_outcome = 0;
for (int i = 0; i < records_count; i++) {
printf("日期:%d/%d/%d,姓名:%s,金额:%.2lf,类型:%s,资金来源或去处:%s\n",
records[i].year, records[i].month, records[i].day,
records[i].name, records[i].amount, records[i].type,
records[i].fromto);
if (strcmp(records[i].type, "income") == 0) {
total_income += records[i].amount;
} else {
total_outcome += records[i].amount;
}
}
printf("---------------------------------\n");
printf("总收入:%.2lf,总支出:%.2lf,余额:%.2lf\n",
total_income, total_outcome, total_income - total_outcome);
}
// 删除模块
void delete_record()
{
printf("请输入日期(年 月 日):");
int year, month, day;
scanf("%d %d %d", &year, &month, &day);
printf("请输入姓名:");
char name[100];
scanf("%s", name);
for (int i = 0; i < records_count; i++) {
if (records[i].year == year
&& records[i].month == month
&& records[i].day == day
&& strcmp(records[i].name, name) == 0) {
for (int j = i; j < records_count - 1; j++) {
records[j] = records[j+1];
}
records_count--;
printf("记录已删除!\n");
return;
}
}
printf("没有找到匹配的记录!\n");
}
// 主函数
int main()
{
while (1) {
int choice = menu();
switch (choice) {
case 1:
input_record();
break;
case 2:
query_record();
break;
case 3:
show_records();
break;
case 4:
delete_record();
break;
case 0:
printf("再见!\n");
return 0;
default:
printf("无效选项,请重新选择!\n");
}
}
}
使用C语言实现宿舍财务管理系统’
#include <stdio.h>
#include <string.h>
struct student {
char name[20];
char gender[10];
int age;
char dormitory[20];
};
int main()
{
struct student stu[100];
int n;
int i;
printf("请输入学生人数:");
scanf("%d", &n);
for (i = 0; i < n; i++)
{
printf("请输入第%d个学生的姓名:", i + 1);
scanf("%s", stu[i].name);
printf("请输入第%d个学生的性别:", i + 1);
scanf("%s", stu[i].gender);
printf("请输入第%d个学生的年龄:", i + 1);
scanf("%d", &stu[i].age);
printf("请输入第%d个学生的宿舍:", i + 1);
scanf("%s", stu[i].dormitory);
}
printf("\n");
printf("学生宿舍管理系统\n");
printf("姓名\t性别\t年龄\t宿舍\n");
for (i = 0; i < n; i++)
{
printf("%s\t%s\t%d\t%s\n", stu[i].name, stu[i].gender, stu[i].age, stu[i].dormitory);
}
return 0;
}