怎么用c语言函数编写宿舍财务管理系统?

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;
}

img

#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;
}