C 语言学校账单系统

2025年3月17日 | 阅读68分钟

在本文中,您将了解一个演示如何在C语言中构建学校计费系统的项目。您将通过一个程序来学习这个概念,该程序详细说明了整个过程中发生的所有功能。

什么是学校计费系统,以及为什么要使用它?

一个简单生成的数据库,存储学校与支付和会计部门相关的活动的所有详细信息,包括学生账户和教职员工账户。我们需要使用它来保证学校支付或账单数据的安全,并在需要时检索它。

此程序或数据库主要存储学生的费用余额、必须支付给教职员工或非教学人员的工资、学生支付的总金额、学生预付款等。因此,让我们将整个概念分为三个模块或结构,第一个模块处理日期,第二个模块处理学生数据,第三个模块处理教职员工和非教学人员的数据。我们将构建一个主要基于switch语句和C语言基本成员的程序。

C语言学校计费系统程序划分的模块是

  • date
  • 学生
  • 教职员工和非教学人员

在这里,“日期”模块表示特定日期的记录条目,即学生记录条目或教职员工记录条目。如果这些记录中的任何一条是当天新输入的,这个模块可以帮助我们找到这些记录的详细信息。它记录或存储记录存储时的日期和月份。 “学生”模块表示学生费用详细信息,其中存储与学生相关的费用余额、预付款等。它用于管理该学校的每个学生记录。“教职员工”模块表示每位教职员工收到的工资详细信息。它用于管理该学校的每位教职员工记录。

使用C语言学校计费系统可以执行的操作是

  • 检查日期
  • 添加新的学生记录或教职员工记录
  • 更新已存在的记录
  • 搜索已存在的记录
  • 删除记录
  • 查找记录的工资
  • 查找记录的费用

“检查日期”操作允许您访问在指定日期执行的操作,例如添加新的学生记录或教职员工记录等。“添加新的学生记录或教职员工记录”操作允许您添加属于学生、教职员工或非教学人员的新记录。这有助于增加数据库中的记录数量。“更新已存在的记录”操作有助于您修改或更改学生、教职员工或非教学人员的现有记录。例如,如果某个教职员工的工资增加了。因此,数据库使用此策略执行更新操作。

“搜索已存在的记录”操作通过指定其任何详细信息来帮助您搜索学生记录、教职员工记录或非教学人员记录,以便显示所有数据。“删除记录”操作有助于您删除记录,该记录可以是学生记录、教职员工记录或非教学人员记录。执行此操作时,任何记录都可以从链接的数据库中完全删除。“查找记录的工资”操作用于查找记录的工资,该记录仅属于教职员工和非教学人员,而不属于学生。“查找记录的费用”操作用于查找特定学生应支付的总费用金额,并说明费用余额(如有)。

让我们将整个程序分成几个片段,每个片段包含一个方法,逐一描述上面讨论的其中一个操作。在找到所有操作的方法之后,让我们将所有讨论的方法合并,形成一个处理和表示学生记录系统的软件。这使我们的工作更易于访问和理解。

学校计费系统C语言程序中可能涉及多种方法。让我们逐一讨论每种方法,然后将项目的所有要求与讨论的方法结合起来,从而完成我们的整个项目。

程序中涉及的方法

  • start()

“start()”方法使用户能够开始和进行他的操作。一旦访问该方法,程序就会启动。

  • check_date()

“check_date()”方法允许您访问在指定日期执行的操作。例如,在特定日期2022年2月20日添加了新的学生记录或教职员工记录。因此,当输入所需的日期“2022年2月20日”时,将显示当天执行的操作,即添加新的学生或教职员工记录,这有助于用户了解当天发生的所有活动。

  • add_new_record()

“add_new_record()”方法允许您添加属于学生、教职员工或非教学人员的新记录。这有助于增加数据库中的记录数量。

  • update()

帮助并允许您修改或更改学生、教职员工或非教学人员的现有记录的方法是修改方法或“update()”。例如,如果特定教职员工的工资增加了,用户将访问update()方法来修改工资已增加的特定教职员工的工资详细信息。

  • find_record()

“find_record()”方法通过指定其任何详细信息来帮助您搜索学生记录、教职员工记录或非教学人员记录,以便显示该特定记录的所有数据。

  • delete_record()

“delete_record()”方法“有助于您删除记录,该记录可以是学生记录、教职员工记录或非教学人员记录”。执行此操作时,任何记录都可以从链接的数据库中完全删除。

  • find_record_salary()

“find_record_salary()”方法用于查找仅属于教职员工和非教学人员(不属于学生)的记录的工资。

  • find_record_fee()

“find_record_fee()”方法用于查找特定学生应支付的总费用金额,费用余额(如有),说明已支付的预付款金额以及报销(如有)。

这些是构成“C语言学校计费系统”程序的方法。我们已经从上述陈述中了解了这些方法的概述。让我们详细了解上面讨论的方法以及满足其操作要求​​的代码。这些方法是程序的基本步骤和支柱,它们有助于使用C语言构建学校计费系统。

1. add_new_record()

对展示一个方法的上述程序进行的解释

“add_new_record()”方法用于添加一条新记录,该记录可以属于学生、教职员工或非教学人员。它所属记录的类型和类别可以是学校预期类型中的任何特定类型。因此,此方法的主要目的是添加新记录,然后构建数据库中的另一个记录。因此,只能使用此方法添加新记录。

首先,使用程序所需的正确数据类型声明必要的变量。声明变量后,使用“是或否”复选框设置方法的开始操作。一旦用户选择开始方法或添加新记录,他/她应按“y”键,以向系统传达开始方法功能的意图。

在程序主函数开始时,会要求用户输入他们是想输入新的学生记录还是新的教职员工记录。因此,如果他们选择输入学生记录,那么他们必须输入1。如果不是学生记录,并且他们想输入教职员工或非教学人员的记录,则必须选择并输入2。因此,根据用户输入的变量“j”的值,函数将选择路径并选择操作。

当输入值为1时,将要求输入学生详细信息,用户必须一一输入详细信息,包括姓名、班级、已付费用、应付费用等。如果学生费用已支付且仍有欠款,也可以使用方法中提到的语句显示。此方法还包含一些与添加记录无关的操作。为了清楚地了解他们的余额费用明细等,这些操作也包含在方法中。

如果用户选择变量“j”的值为2,那么教职员工记录或非教学人员记录将执行相同的迭代和操作。因此,输入变量“j”的值决定了学生模块和员工模块的条目。教职员工和非教学人员的工资详细信息将显示出来,也可以通过此方法了解应付或预付工资。

它不是直接计算的,而是该方法会转向处理所有此类操作的另一个方法(这里讨论的除add_student之外的方法将在接下来的陈述中讨论)。通过这种方式,对于对学生详细信息、教职员工详细信息和非教学人员详细信息执行的每种操作,都可以使用“add_new_record()”方法来完成。

2. find_record()

对展示一个方法的上述程序进行的解释

“find_record()”方法用于查找已存在的记录的详细信息,该记录可以属于学生、教职员工或非教学人员。它所属记录的类型和类别可以是学校预期类型中的任何特定类型。因此,此方法的主要目的是查找记录的详细信息。使用此方法,我们可以通过学生、教职员工或非教学人员的姓名来查找记录的详细信息。因此,当发生误解并且需要验证时,此方法非常有用。

首先,使用程序所需的正确数据类型声明必要的变量。声明变量后,“find_record()”方法的操作将准备开始,并使用“是或否”复选框请求确认。一旦用户选择开始方法或查找已存在的记录,他/她应按“y”键,以向系统传达开始方法功能的意图。

在程序主函数开始时,会要求用户输入他们是想搜索学生记录还是教职员工记录(包括非教学人员)。因此,如果他们选择搜索学生记录,那么他们必须输入1。如果不是学生记录,并且他们想搜索教职员工或非教学人员的记录,则必须选择并输入2。因此,根据用户输入的变量“j”的值,函数将选择路径并选择操作。

当输入值为1时,将要求输入学生记录的任何一个详细信息,用户必须输入详细信息,例如姓名或班级等。在此方法中,我们要求输入学生姓名。可以要求输入任何一个详细信息。如果学生费用已支付且仍有欠款,也可以使用方法中提到的语句显示。其他方法也可以链接并调用以查找详细信息,但只需在同一方法中定义详细信息。为了清楚地了解他们的余额费用明细或到期明细等,这些操作也包含在方法中。

如果用户选择变量“j”的值为2,那么教职员工记录或非教学人员记录将执行相同的迭代和操作。因此,输入变量“j”的值决定了学生模块和员工模块的条目。教职员工和非教学人员的工资详细信息将显示出来,也可以通过此方法了解应付或预付工资。

此方法中定义的所有语句都直接计算,而无需调用程序中包含的任何其他方法。该方法中唯一会发生的方法调用是递归,即函数调用自身。通过这种方式,可以使用“find_record()”方法来查找与学生记录、教职员工记录和非教学人员记录相关的每种详细信息。

3. update()

对展示一个方法的上述程序进行的解释

“update()”方法用于更新已存在的记录的详细信息,该记录可以属于学生、教职员工或非教学人员。它所属记录的类型和类别可以是学校预期类型中的任何特定类型。因此,此方法的主要目的是查找和修改所需或指定记录的详细信息。

使用此方法,我们可以更新详细信息,并且记录的详细信息应该通过学生、教职员工或非教学人员的姓名来查找。因此,当发生误解并且需要验证和修改时,此方法非常有用。

首先,使用程序所需的正确数据类型声明必要的变量。声明变量后,“update()”方法的操作将准备开始,并使用“是或否”复选框请求确认。一旦用户选择开始方法或查找已存在的记录,他/她应按“y”键,以向系统传达开始方法功能的意图。

在程序主函数开始时,会要求用户输入他们是想搜索学生记录还是教职员工记录(包括非教学人员)。因此,如果他们选择搜索学生记录,那么他们必须输入1。如果不是学生记录,并且他们想搜索教职员工或非教学人员的记录,则必须选择并输入2。因此,根据用户输入的变量“j”的值,函数将选择路径并选择操作。

当输入值为1时,将要求输入学生记录的任何一个详细信息,即学生姓名或姓名和学号,或姓名、班级和学号。用户必须输入姓名或班级等详细信息。可以通过输入上面程序中提到的任何数字来选择此选项。

在此方法中,我们要求输入学生姓名。可以要求输入任何一个详细信息。一旦输入了学生姓名,系统就会搜索具有该姓名匹配的记录,然后允许用户相应地修改其详细信息,然后也可以使用方法中提到的语句显示。其他方法也可以链接并调用以查找详细信息,但只需在同一方法中定义详细信息。

如果用户选择变量“j”的值为2,那么教职员工记录或非教学人员记录将执行相同的迭代和操作。因此,输入变量“j”的值决定了学生模块和员工模块的条目。教职员工和非教学人员的工资详细信息可以通过此方法进行修改和显示。教职员工或非教学人员的 ID 也可以通过此方法进行修改。

如果输入的学生或教职员工信息与数据库中现有记录的详细信息不匹配,则函数将执行else块,该块显示一条语句:“您正在搜索的记录未找到”。通过这条语句,用户可以判断输入的无效或错误。在所有情况下,无论是学生记录、教职员工记录还是非教学人员记录,都会执行相同的过程,直到找到记录为止。

此方法中定义的所有语句都直接计算,而无需调用程序中包含的任何其他方法。通过这种方式,可以使用“update()”方法来查找和修改与学生记录、教职员工记录和非教学人员记录相关的每种详细信息。

4. delete_record()

对展示一个方法的上述程序进行的解释

“delete_record()”方法用于删除已存在的记录的完整详细信息,或者可以删除属于学生、教职员工或非教学人员的记录。它所属记录的类型和类别可以是学校预期类型中的任何特定类型。因此,此方法的主要目的是查找和删除所需或指定记录的详细信息。

使用此方法,我们可以删除记录,并且记录的详细信息应该通过学生、教职员工或非教学人员的姓名来查找。因此,当学生离校或员工辞职时,此方法非常有用,以便可以从数据库中删除他们的记录。

首先,使用程序所需的正确数据类型声明必要的变量。声明变量后,“delete_record()”方法的操作将准备开始,并使用“是或否”复选框请求确认。一旦用户选择开始方法或查找已存在的记录,他/她应按“y”键,以向系统传达开始方法功能的意图。

在程序主函数开始时,会要求用户输入他们是想搜索学生记录还是教职员工记录(包括非教学人员)。因此,如果他们选择搜索学生记录,那么他们必须输入1。如果不是学生记录,并且他们想搜索教职员工或非教学人员的记录,则必须选择并输入2。因此,根据用户输入的变量“j”的值,函数将选择路径并选择操作。

当输入值为1时,将要求输入学生姓名,用户必须在被询问后输入姓名。一旦用户通过输入输入了学生姓名,程序的实际过程就开始了。在此程序中,我们也要求输入学生姓名。可以要求输入任何一个详细信息。一旦输入了学生姓名,系统就会搜索具有该姓名匹配的记录,然后允许用户相应地删除相关记录,然后也可以使用方法中提到的语句显示。

如果用户选择变量“j”的值为2,那么教职员工记录或非教学人员记录将执行相同的迭代和操作。因此,输入变量“j”的值决定了学生模块和员工模块的条目。教职员工和非教学人员的记录可以通过执行此步骤的此方法删除。

如果输入的学生或教职员工信息与数据库中现有记录的详细信息不匹配,则函数将执行else块,该块显示一条语句:“您正在搜索的记录未找到”。通过这条语句,用户可以判断输入的无效或错误。在所有情况下,无论是学生记录、教职员工记录还是非教学人员记录,都会执行相同的过程,直到找到记录为止。

5. find_record_salary()

对展示一个方法的上述程序进行的解释

“find_record_salary()”方法用于通过使用教职员工记录或非教学人员记录的某些详细信息来查找其工资,以验证已支付的工资金额以及应支付的剩余工资。它所属记录的类型和类别可以是学校预期类型中的任何特定类型。因此,此方法的主要目的是查找所需或指定记录的工资账户详细信息。

使用此方法,我们可以找到记录的工资状态,是已付清工资还是未付清,上个月是否还有剩余工资,教职员工或非教学人员是否以前预支过工资等。所有这些详细信息都可以通过使用和访问此方法来找到。特定记录的所有这些详细信息都是通过其姓名、ID 或两者来查找的。因此,当出现付款相关问题时,此方法非常有用,并且所有数据都可以清晰地存储在数据库中。

首先,在程序开始时,使用程序所需的正确数据类型声明必要的变量。声明变量后,“find_record_salary()”方法的操作将准备开始,并使用“是或否”复选框请求确认。一旦用户选择开始方法或查找已存在的记录,他/她应按“y”键,以向系统传达开始方法功能的意图。

在程序主函数或方法开始时,不会要求用户输入他们是想搜索学生记录还是教职员工记录,因为工资方面仅与教职员工记录或非教学人员记录相关。教职员工记录和非教学人员记录之间可能存在混淆,但为了克服这种混淆,两者都被视为一个类别,称为“员工”,包括教职员工记录和非教学人员记录。

因此,他/她必须选择搜索员工记录。无需选择。因此,这是此方法与其他先前声明的方法之间的主要区别。进入方法或函数体后,会要求用户输入教职员工或非教学人员的姓名和 ID。一旦用户通过输入输入了教职员工或非教学人员的姓名和 ID,程序的实际过程就开始了。用户输入的姓名和 ID 将与数据库中已存在的记录的姓名和 ID 进行比较。一旦找到匹配项,操作过程就开始了。

当姓名或 ID 与输入的教职员工或非教学人员记录的姓名或 ID 匹配时,将计算工资详细信息,包括已支付的预支工资、应支付的剩余工资、最后一次支付工资的月份等。如果支付给教职员工或非教学人员的预支工资小于0且满足此条件,通常意味着之前没有支付预支工资。

因此,预支金额变量被赋值为“0”,同样,如果上个月最后一次支付的工资等于上个月,则剩余工资将被赋值为“0”。同样,迭代和操作也将对非教学人员记录进行处理。通过执行此步骤,可以通过此方法显示教职员工(即教职员工)和非教学人员记录的工资详细信息。

如果输入的教职员工或非教学人员信息与数据库中现有记录的详细信息不匹配,则函数将执行else块,该块显示一条语句:“您正在搜索的记录未找到”。通过这条语句,用户可以判断输入的无效或错误。在所有情况下,无论是教职员工记录还是非教学人员记录,都会执行相同的过程,直到找到记录为止。

6. find_record_fee()

对展示一个方法的上述程序进行的解释

“find_record_fee()”方法用于通过使用学生记录的某些详细信息来查找其费用详细信息,以验证已支付的费用金额以及学生应支付的剩余费用。它所属记录的类型和类别可以是学校预期类型中的任何特定类型。因此,此方法的主要目的是查找所需或指定学生记录的费用账户详细信息。

使用此方法,我们可以找到学生记录的费用状态,是已支付全部费用还是未支付,上个月是否还有应付的剩余费用,学生以前是否欠费,学生是否支付了预付费用等。所有这些详细信息都可以通过使用和访问此方法来找到。特定记录的所有这些详细信息都是通过学生记录的姓名、班级和 ID 来查找的。因此,当出现费用付款相关问题时,此方法非常有用,并且所有数据都可以清晰地存储在数据库中。

首先,在程序开始时,使用程序所需的正确数据类型声明必要的变量。声明变量后,“find_record_fee()”方法的操作将准备开始,并使用“是或否”复选框请求确认。一旦用户选择开始方法或查找已存在的记录,他/她应按“y”键,以向系统传达开始方法功能的意图。

在程序主函数或方法开始时,不会要求用户输入他们是想搜索学生记录还是教职员工记录,因为费用方面仅与学生记录相关。因此,他/她必须选择搜索学生记录。无需选择。因此,这是此方法与其他先前声明的方法之间的主要区别,并且此方法与“find_record_salary()”方法非常相似,因为执行标准几乎相同,但操作有所不同。

进入方法或函数体后,会要求用户输入相应学生的姓名、班级和学号。一旦用户通过输入输入了学生的姓名、班级和学号,程序的实际过程就开始了。用户输入的姓名、班级和学号将与数据库中已存在的记录的详细信息进行比较。一旦找到匹配项,操作过程就开始了。

当完整的详细信息与用户输入的匹配时,将计算费用详细信息,包括已支付的预付费用、应支付的剩余费用、最后一次支付费用的月份等。如果学生支付的预付费用小于0且满足此条件,通常意味着之前没有支付预付费用。

因此,预付金额变量被赋值为“0”,同样,如果上个月最后一次支付的费用等于上个月,则剩余欠费将被赋值为“0”。同样,迭代和操作将继续进行。通过执行此步骤,可以通过此方法显示学生记录的费用详细信息。

如果输入的学生信息与数据库中现有记录的详细信息不匹配,则函数将执行else块,该块显示一条语句:“您正在搜索的记录未找到”。通过这条语句,用户可以判断输入的无效或错误。在所有情况下,无论是教职员工记录还是非教学人员记录,都会执行相同的过程,直到找到记录为止。

7. check_date()

对展示一个方法的上述程序进行的解释

“check_date()”方法用于验证用户输入的日期是否有效。如果输入的日期无效,则会通知用户该日期无效,并要求用户重新输入日期。通过分别比较月份和日期来完成验证。如果输入的月份大于12且小于1,则返回无效语句。同样,如果输入的日期大于31或小于1,则返回无效语句。在这些情况之外,程序将返回相应的月份。因此,此方法的主要目的是验证日期的准确性。

8. clscanf()

对展示一个方法的上述程序进行的解释

声明“clscanf()”方法是为了在程序中需要扫描类的地方通过访问此方法来扫描类。此方法这样声明是为了防止在此方法使用的程序中发生任何篡改。与所有其他方法一样,变量在程序开始时声明,然后在扫描类和检查基本条件时使用。在验证基本条件后,如果条件满足,则执行“if body”并进行扫描。如果给定的基本条件不为真或不满足,则执行“else body”,它返回到变量“month”。

9. exiting()

对展示一个方法的上述程序进行的解释

“exit()”方法用于在访问该方法时直接退出程序的执行。变量“i”在程序开始时考虑,并在整个程序中作为单个变量使用。如果访问了“exit(0)”,则意味着用户希望在该时间点退出程序的执行。一旦调用该方法,程序将停止执行并返回到初始终端,除非用户再次运行该程序。不仅退出程序,还有一个睡眠过程。睡眠过程表示程序的执行将暂停直到特定持续时间,并且在给定时间完成后,进程将继续其执行。

10. start()

对展示一个方法的上述程序进行的解释

声明“start()”方法是为了通过向用户提问并相应地执行来启动程序。此方法涉及几种情况,这些情况反过来又表示响应过程。声明方法后,“i”和“j”变量会根据其目的定义。变量“i”的目的是控制内部switch语句的操作流程,而变量“j”的目的是控制外部switch语句的操作流程,该语句处理账户类型。

更具体地说,变量“j”负责访问记录的类型,无论是学生记录、教职员工记录还是非教学人员记录。如果变量“j”的值为1,则用户可以访问学生账户,如果变量“j”的值为2,则用户可以访问教职员工或非教学人员账户,如果变量“j”的值等于3,则程序将停止执行,用户可以退出。通过这种方式,变量的值在整个程序中都很有用。

变量“i”负责访问嵌入在账户类型中的函数。例如,在学生账户中,有许多函数,如“add_new_record()”、“find_record_fee()”、“update()”等;在员工账户中,有许多函数,如“add_new_record()”、“find_record_salary()”、“find_record()”等。为了以有组织的方式访问这些记录,使用了变量“i”。变量“j”的值是主变量,而变量“i”是子变量。如果变量“i”的值为1,则新记录将被添加到数据库。记录的类型取决于变量“j”的值。

当变量“j”的值为1时,可以访问与学生账户相关的所有函数。在变量“j”的switch语句中,有一个变量“i”的内部switch语句,它改进了学生账户的功能。当变量“i”的值为1时,通过访问“add_new_record()”方法,可以在数据库中添加新记录,即新的学生记录。

同样,如果变量“i”的值为2,则可以通过访问“find_record()”方法搜索已存在的记录。通过这种方式,可以使用start()方法访问和使用所有其他方法。这不仅适用于学生账户,也适用于员工账户,包括教职员工账户和非教学人员账户。使用内部switch语句并通过提供j值为2,可以处理和修改员工账户。因此,我们可以肯定地说,“start()”方法对于程序执行任何类型的操作都非常重要。

这些是构成“C语言学校计费系统”程序的参与方法或函数。该程序是上面讨论的每种方法的组合。让我们构建程序。

演示“C语言学生记录系统”的程序

上述程序是前面讨论的所有方法的组合,并根据程序需求进行了少量修改。此程序的输出将是一个窗口,其中包含用户请求的多个语句。让我们运行程序并查看输出。

上述程序的输出

下面的图片展示了程序运行时的界面。

School Billing System in C

在此窗口出现在屏幕上后,您可以确认代码已开始运行并且过程成功。看到此屏幕后,请按任意键继续后续过程。

School Billing System in C

为了进一步确认,用户在第二个屏幕上也会被要求输入任意键。用户输入一个键后,该屏幕将消失,并显示下面的屏幕。

School Billing System in C

如上屏幕所示,将要求输入当前月份和日期,用户必须相应地输入日期和月份。

School Billing System in C

上面的图片展示了显示这些选项的屏幕,其中必须选择账户类型。由于用户想选择学生账户,用户输入了1。输入1后,将显示下面提到的选项。

School Billing System in C

在与学生账户相关的给定选项中,必须选择并输入一个选项。最初,必须向内部数据库添加一条记录。因此,必须选择“添加记录”选项,并输入其相应的序号,即1。

School Billing System in C

输入了学生的相应详细信息。输入详细信息后,再次选择学生账户并选择“查找记录”选项,以检查先前输入的信息是否已存储。

School Billing System in C

当输入选择2时,系统将准备好通过提供一些凭证来搜索记录。因此,将询问用户希望如何查找记录。如果用户希望通过姓名搜索记录,则可以选择选项1。

School Billing System in C

用户选择1作为其选择后,将显示以下屏幕。必须输入学生姓名以查找其详细信息。

School Billing System in C
School Billing System in C

当姓名作为输入并输入后,该特定学生的详细信息将显示出来,如上图所示。同样,学校计费系统程序也适用于教师账户。

如果用户想继续该过程,将提出关于确认程序执行的请求。如果用户希望继续,他/她必须按“y”或“Y”继续。如果输入任何其他键,程序将停止执行并退出。这就是C语言学校计费系统程序的运行方式。