From a8aaf4dabd37995e746b19fbc7294278a68a7f18 Mon Sep 17 00:00:00 2001 From: tong tong zhang Date: Fri, 28 Apr 2023 15:30:07 +0800 Subject: [PATCH] 2222 --- .gitignore | 54 ---- C1C2.md | 39 --- C6-C8.md | 34 --- LICENSE | 130 ---------- README.md | 292 ---------------------- buzhou.md | 9 - ck.md | 723 ----------------------------------------------------- readme1.md | 39 --- readme2.md | 722 ---------------------------------------------------- 9 files changed, 2042 deletions(-) delete mode 100644 .gitignore delete mode 100644 C1C2.md delete mode 100644 C6-C8.md delete mode 100644 LICENSE delete mode 100644 README.md delete mode 100644 buzhou.md delete mode 100644 ck.md delete mode 100644 readme1.md delete mode 100644 readme2.md diff --git a/.gitignore b/.gitignore deleted file mode 100644 index cd531cf..0000000 --- a/.gitignore +++ /dev/null @@ -1,54 +0,0 @@ -# ---> C -# Prerequisites -*.d - -# Object files -*.o -*.ko -*.obj -*.elf - -# Linker output -*.ilk -*.map -*.exp - -# Precompiled Headers -*.gch -*.pch - -# Libraries -*.lib -*.a -*.la -*.lo - -# Shared objects (inc. Windows DLLs) -*.dll -*.so -*.so.* -*.dylib - -# Executables -*.exe -*.out -*.app -*.i*86 -*.x86_64 -*.hex - -# Debug files -*.dSYM/ -*.su -*.idb -*.pdb - -# Kernel Module Compile Results -*.mod* -*.cmd -.tmp_versions/ -modules.order -Module.symvers -Mkfile.old -dkms.conf - diff --git a/C1C2.md b/C1C2.md deleted file mode 100644 index fa42f8d..0000000 --- a/C1C2.md +++ /dev/null @@ -1,39 +0,0 @@ -C1: 启动程序 -命令行中执行命令./app,系统启动,显示提示信息,然后显示功能菜单,等待用户输入命令。 - -学生成绩管理 -1 输入分数 -2 计算每个学生各门成绩的总分和平均分 -3 计算每个课程的总分和平均分 -4 按分数降序排序 -5 按分数升序排序 -6 按数据升序排序 -7 按姓名的字典顺序排序 -8 查找数据 -9 查找姓名 -10 统计分析 -11 列表记录 -12 写入文件 -13 读取文件 -0 退出 -请输入你的选择: - -C2: 显示命令菜单 -调用 Menu() 函数显示命令菜单,用户输入选项后,将结果返回主函数 - -学生成绩管理 -1 输入分数 -2 计算每个学生各门成绩的总分和平均分 -3 计算每个课程的总分和平均分 -4 按分数降序排序 -5 按分数升序排序 -6 按数据升序排序 -7 按姓名的字典顺序排序 -8 查找数据 -9 查找姓名 -10 统计分析 -11 列表记录 -12 写入文件 -13 读取文件 -0 退出 -请输入你的选择: \ No newline at end of file diff --git a/C6-C8.md b/C6-C8.md deleted file mode 100644 index 066db95..0000000 --- a/C6-C8.md +++ /dev/null @@ -1,34 +0,0 @@ -c6:计算每门课程的总分和平均分 -选择菜单命令 3,计算每门课程的总分和平均分,然后利用循环逐个输出每门课程的总分和平均分,结果都取整数。 - - 请输入你的选择: 3 - 课程 1: 总分 = 337, 平均分 = 84 - 课程 2: 总分 = 364, 平均分 = 91 - 课程 3: 总分 = 383, 平均分 = 95 - - c7:学生总分排序 - 如果a < b,则按升序排序。 选择菜单命令 4,按选择法将数组sum的元素值按升序进行排序,显示提示信息,最后打印出学生信息。 - 如果a > b,则按降序排序。选择菜单命令 5,按选择法将数组sum的元素值按降序进行排序,显示提示信息,最后打印出学生成绩。 - - 请输入你的选择: 4 - 按分数降序排序: - 2214111038 ZhangTongtong 100 95 86 281 93 - 2214111018 LiYuxuan 85 91 98 274 91 - 2214111026 MengTingyu 77 89 99 265 88 - 2214111022 ZhouYufan 75 89 100 264 88 - 请输入你的选择: 5 - 按分数升序排列: - 2214111022 ZhouYufan 75 89 100 264 88 - 2214111026 MengTingyu 77 89 99 265 88 - 2214111018 LiYuxuan 85 91 98 274 91 - 2214111038 ZhangTongtong 100 95 86 281 93 - - c8:学号顺序排序 - 选择菜单命令 6,按学号从小到大进行排序,显示提示信息,最后打印学生信息。 - - 请输入你的选择: 6 - 按学号降序排列: - 2214111018 LiYuxuan 85 91 98 274 91 - 2214111022 ZhouYufan 75 89 100 264 88 - 2214111026 MengTingyu 77 89 99 265 88 2214111038 ZhangTongtong 100 95 86 281 93 - \ No newline at end of file diff --git a/LICENSE b/LICENSE deleted file mode 100644 index cbafa43..0000000 --- a/LICENSE +++ /dev/null @@ -1,130 +0,0 @@ - -木兰宽松许可证, 第2版 - -木兰宽松许可证, 第2版 - -2020年1月 http://license.coscl.org.cn/MulanPSL2 - -您对“软件”的复制、使用、修改及分发受木兰宽松许可证,第2版(“本许可证”)的如下条款的约束: - -0. 定义 - -“软件” 是指由“贡献”构成的许可在“本许可证”下的程序和相关文档的集合。 - -“贡献” 是指由任一“贡献者”许可在“本许可证”下的受版权法保护的作品。 - -“贡献者” 是指将受版权法保护的作品许可在“本许可证”下的自然人或“法人实体”。 - -“法人实体” 是指提交贡献的机构及其“关联实体”。 - -“关联实体” 是指,对“本许可证”下的行为方而言,控制、受控制或与其共同受控制的机构,此处的控制是指有受控方或共同受控方至少50%直接或间接的投票权、资金或其他有价证券。 - -1. 授予版权许可 - -每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的版权许可,您可以复制、使用、修改、分发其“贡献”,不论修改与否。 - -2. 授予专利许可 - -每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的(根据本条规定撤销除外)专利许可,供您制造、委托制造、使用、许诺销售、销售、进口其“贡献”或以其他方式转移其“贡献”。前述专利许可仅限于“贡献者”现在或将来拥有或控制的其“贡献”本身或其“贡献”与许可“贡献”时的“软件”结合而将必然会侵犯的专利权利要求,不包括对“贡献”的修改或包含“贡献”的其他结合。如果您或您的“关联实体”直接或间接地,就“软件”或其中的“贡献”对任何人发起专利侵权诉讼(包括反诉或交叉诉讼)或其他专利维权行动,指控其侵犯专利权,则“本许可证”授予您对“软件”的专利许可自您提起诉讼或发起维权行动之日终止。 - -3. 无商标许可 - -“本许可证”不提供对“贡献者”的商品名称、商标、服务标志或产品名称的商标许可,但您为满足第4条规定的声明义务而必须使用除外。 - -4. 分发限制 - -您可以在任何媒介中将“软件”以源程序形式或可执行形式重新分发,不论修改与否,但您必须向接收者提供“本许可证”的副本,并保留“软件”中的版权、商标、专利及免责声明。 - -5. 免责声明与责任限制 - -“软件”及其中的“贡献”在提供时不带任何明示或默示的担保。在任何情况下,“贡献者”或版权所有者不对任何人因使用“软件”或其中的“贡献”而引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性。 - -6. 语言 - -“本许可证”以中英文双语表述,中英文版本具有同等法律效力。如果中英文版本存在任何冲突不一致,以中文版为准。 - -条款结束 - -如何将木兰宽松许可证,第2版,应用到您的软件 - -如果您希望将木兰宽松许可证,第2版,应用到您的新软件,为了方便接收者查阅,建议您完成如下三步: - -1, 请您补充如下声明中的空白,包括软件名、软件的首次发表年份以及您作为版权人的名字; - -2, 请您在软件包的一级目录下创建以“LICENSE”为名的文件,将整个许可证文本放入该文件中; - -3, 请将如下声明文本放入每个源文件的头部注释中。 - -Copyright (c) [Year] [name of copyright holder] -[Software Name] is licensed under Mulan PSL v2. -You can use this software according to the terms and conditions of the Mulan PSL v2. -You may obtain a copy of Mulan PSL v2 at: - http://license.coscl.org.cn/MulanPSL2 -THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -See the Mulan PSL v2 for more details. - -Mulan Permissive Software License,Version 2 - -Mulan Permissive Software License,Version 2 (Mulan PSL v2) - -January 2020 http://license.coscl.org.cn/MulanPSL2 - -Your reproduction, use, modification and distribution of the Software shall be subject to Mulan PSL v2 (this License) with the following terms and conditions: - -0. Definition - -Software means the program and related documents which are licensed under this License and comprise all Contribution(s). - -Contribution means the copyrightable work licensed by a particular Contributor under this License. - -Contributor means the Individual or Legal Entity who licenses its copyrightable work under this License. - -Legal Entity means the entity making a Contribution and all its Affiliates. - -Affiliates means entities that control, are controlled by, or are under common control with the acting entity under this License, ‘control’ means direct or indirect ownership of at least fifty percent (50%) of the voting power, capital or other securities of controlled or commonly controlled entity. - -1. Grant of Copyright License - -Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable copyright license to reproduce, use, modify, or distribute its Contribution, with modification or not. - -2. Grant of Patent License - -Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable (except for revocation under this Section) patent license to make, have made, use, offer for sale, sell, import or otherwise transfer its Contribution, where such patent license is only limited to the patent claims owned or controlled by such Contributor now or in future which will be necessarily infringed by its Contribution alone, or by combination of the Contribution with the Software to which the Contribution was contributed. The patent license shall not apply to any modification of the Contribution, and any other combination which includes the Contribution. If you or your Affiliates directly or indirectly institute patent litigation (including a cross claim or counterclaim in a litigation) or other patent enforcement activities against any individual or entity by alleging that the Software or any Contribution in it infringes patents, then any patent license granted to you under this License for the Software shall terminate as of the date such litigation or activity is filed or taken. - -3. No Trademark License - -No trademark license is granted to use the trade names, trademarks, service marks, or product names of Contributor, except as required to fulfill notice requirements in section 4. - -4. Distribution Restriction - -You may distribute the Software in any medium with or without modification, whether in source or executable forms, provided that you provide recipients with a copy of this License and retain copyright, patent, trademark and disclaimer statements in the Software. - -5. Disclaimer of Warranty and Limitation of Liability - -THE SOFTWARE AND CONTRIBUTION IN IT ARE PROVIDED WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED. IN NO EVENT SHALL ANY CONTRIBUTOR OR COPYRIGHT HOLDER BE LIABLE TO YOU FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO ANY DIRECT, OR INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM YOUR USE OR INABILITY TO USE THE SOFTWARE OR THE CONTRIBUTION IN IT, NO MATTER HOW IT’S CAUSED OR BASED ON WHICH LEGAL THEORY, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -6. Language - -THIS LICENSE IS WRITTEN IN BOTH CHINESE AND ENGLISH, AND THE CHINESE VERSION AND ENGLISH VERSION SHALL HAVE THE SAME LEGAL EFFECT. IN THE CASE OF DIVERGENCE BETWEEN THE CHINESE AND ENGLISH VERSIONS, THE CHINESE VERSION SHALL PREVAIL. - -END OF THE TERMS AND CONDITIONS - -How to Apply the Mulan Permissive Software License,Version 2 (Mulan PSL v2) to Your Software - -To apply the Mulan PSL v2 to your work, for easy identification by recipients, you are suggested to complete following three steps: - -i. Fill in the blanks in following statement, including insert your software name, the year of the first publication of your software, and your name identified as the copyright owner; -ii. Create a file named "LICENSE" which contains the whole context of this License in the first directory of your software package; -iii. Attach the statement to the appropriate annotated syntax at the beginning of each source file. - -Copyright (c) [Year] [name of copyright holder] -[Software Name] is licensed under Mulan PSL v2. -You can use this software according to the terms and conditions of the Mulan PSL v2. -You may obtain a copy of Mulan PSL v2 at: - http://license.coscl.org.cn/MulanPSL2 -THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -See the Mulan PSL v2 for more details. diff --git a/README.md b/README.md deleted file mode 100644 index fabe634..0000000 --- a/README.md +++ /dev/null @@ -1,292 +0,0 @@ -# System -#学生成绩管理系统代码 - -## 多个函数的使用 - -## 利用结构体 -下面是代码库 -````c - -#include -#include -#include -#define MAX_LEN 10 // 字符串最大长度 -#define STU_NUM 30 // 最多的学生人数 -#define COURSE_NUM 6 // 最多的考试科目数 -typedef struct student -{ - long num; // 每个学生的学号 - char name[MAX_LEN]; // 每个学生的姓名 - float score[COURSE_NUM]; // 每个学生COURSE_NUM门功课的成绩 - float sum; // 每个学生的总成绩 - float aver; // 每个学生的平均成绩 -}STU; -int Menu(void); -void ReadScore(STU stu[], int n, int m); -void AverSumofEveryStudent(STU stu[], int n, int m); -void AverSumofEveryCourse(STU stu[], int n, int m); -void SortbyScore(STU stu[],int n,int m,int (*compare)(float a,float b)); -int Ascending(float a, float b); -int Descending(float a, float b); -void SwapFloat(float *x, float *y); -void SwapLong(long *x, long *y); -void SwapChar(char x[], char y[]); -void AsSortbyNum(STU stu[], int n, int m); -void SortbyName(STU stu[], int n, int m); -void SearchbyNum(STU stu[], int n, int m); -void SearchbyName(STU stu[], int n, int m); -void StatisticAnalysis(STU stu[], int n, int m); -void PrintScore(STU stu[], int n, int m); -void WritetoFile(STU record[], int n, int m); -void ReadfromFile(STU record[], int *n, int *m); -int main(void) -{ - char ch; - int n = 0, m = 0; - STU stu[STU_NUM]; -printf("Input student number(n<%d):", STU_NUM); - scanf("%d", &n); -printf("Input course number(m<=%d):",COURSE_NUM); - scanf("%d", &m); - while (1) - { - ch = Menu(); // 显示菜单,并读取用户输入 - switch (ch) - { - case 1:ReadScore(stu, n, m); - break; - case 2: AverSumofEveryCourse(stu, n, m); - break; - case 3: AverSumofEveryStudent(stu, n, m); - break; - case 4: SortbyScore(stu, n, m, Descending); - printf("\nSort in descending order by score:\n"); - PrintScore(stu, n, m); - break; - case 5: SortbyScore(stu, n, m, Ascending); - printf("\nSort in ascending order by score:\n"); - PrintScore(stu, n, m); - break; - case 6: AsSortbyNum(stu, n, m); - printf("\nSort in ascending order by number:\n"); - PrintScore(stu, n, m); - break; - case 7: SortbyName(stu, n, m); - printf("\nSort in dictionary order by name:\n"); - PrintScore(stu, n, m); - break; - case 8: SearchbyNum(stu, n, m); - break; - case 9: SearchbyName(stu, n, m); - break; - case 10: StatisticAnalysis(stu, n, m); - break; - case 11:PrintScore(stu, n, m); - break; -case 12:WritetoFile(stu, n, m); - break; - case 13:ReadfromFile(stu, &n, &m); - break; - case 0: printf("End of program!"); - exit(0); - default:printf("Input error!"); - } - } - return 0;} -// 函数功能:显示菜单并获得用户键盘输入的选项 -int Menu(void) -{ - int itemSelected; - printf("Management for Students' scores\n"); - printf("1.Input record\n"); - printf("2.Calculate total and average score of every course\n"); - printf("3.Calculate total and average score of every student\n"); - printf("4.Sort in descending order by score\n"); - printf("5.Sort in ascending order by score\n"); - printf("6.Sort in ascending order by number\n"); - printf("7.Sort in dictionary order by name\n"); - printf("8.Search by number\n"); - printf("9.Search by name\n"); - printf("10.Statistic analysis\n"); - printf("11.List record\n"); - printf("12.Write to a file\n"); - printf("13.Read from a file\n"); - printf("0.Exit\n"); - printf("Please Input your choice:"); - scanf("%d", &itemSelected); // 读入用户输入 - return itemSelected; -} -//1 函数功能:输入n个学生的m门课成绩 -void ReadScore(STU stu[], int n, int m) -{ - int i, j; - printf("Input student's ID, name and score:\n"); - for(i=0;i0 ? stu[i].sum / m : -1; - printf("student %d: sum = %.0f, aver = %.0f\n", -i+1, stu[i].sum, stu[i].aver); - } -} -//3 函数功能:计算每门课程的总分和平均分 - -//4 函数功能:按选择法将数组sum的元素值排序 - -// 5使数据按升序排序 -int Ascending(float a, float b) -{ - return a < b; // 这样比较决定了按升序排序,如果a b; -} -// 7交换两个单精度浮点型数据 - -// 8交换两个长整型数据 - -// 9交换两个字符串 -void SwapChar(char x[], char y[]) -{ -char temp[MAX_LEN]; -strcpy(temp, x); -strcpy(x, y); -strcpy(y, temp); -} -// 10函数功能:按选择法将数组num的元素值按从低到高排序 - -// 11函数功能:交换法实现字符串按字典顺序排序 -void AsSortbyNum(STU stu[], int n, int m) -{ - int i, j, k, t; - for (i=0; i=0 && stu[i].score[j]<60)t[0]++; - else if (stu[i].score[j]<70) t[1]++; - else if (stu[i].score[j]<80) t[2]++; - else if (stu[i].score[j]<90) t[3]++; - else if (stu[i].score[j]<100) t[4]++; - else if (stu[i].score[j] == 100) t[5]++; - } - for (i=0; i<=5; i++) - { - if (i==0) printf("<60\t%d\t%.2f%%\n",t[i],(float)t[i]/n*100); - else if (i==5) printf("%d\t%d\t%.2f%%\n", -(i+5)*10,t[i],(float)t[i]/n*100); - else printf("%d-%d\t%d\t%.2f%%\n", -(i+5)*10, (i+5)*10+9, t[i], (float)t[i]/n*100); - } - } -} - -// 15函数功能: 打印学生成绩 -void PrintScore(STU stu[], int n, int m) -{ - int i, j; - for (i=0; i b,则按降序排序。选择菜单命令 5 ,按选择法将数组 sum 的元素值按降序进行排序,显示提示信息,最后打印出学生成绩。 - -Please Input your choice: 4 -Sort in descending order by score: -2214111006 XuZilin 100 95 86 281 93 -2214111011 ZhangYu 85 91 98 274 91 -2214111009 XuZigui 77 89 99 265 88 -2214111025 LiYujia 75 89 100 264 88 -Please Input your choice: 5 -Sort in ascending order by score: -2214111025 LiYujia 75 89 100 264 88 -2214111009 XuZigui 77 89 99 265 88 -2214111011 ZhangYu 85 91 98 274 91 -2214111006 XuZilin 100 95 86 281 93 -C8: 学号顺序排序 -选择菜单命令 6 ,按学号从小到大进行排序,显示提示信息,最后打印学生信息。 - -Please Input your choice: 6 -Sort in ascending order by number: -2214111006 XuZilin 100 95 86 281 93 -2214111009 XuZigui 77 89 99 265 88 -2214111011 ZhangYu 85 91 98 274 91 -2214111025 LiYujia 75 89 100 264 88 -C9: 姓名顺序排序 -选择菜单命令 7 ,按姓名的字典顺序进行排序,显示提示信息,最后打印学生信息。 - -Please Input your choice: 7 -Sort in dictionary order by name: -2214111025 LiYujia 75 89 100 264 88 -2214111009 XuZigui 77 89 99 265 88 -2214111006 XuZilin 100 95 86 281 93 -2214111011 ZhangYu 85 91 98 274 91 -C10: 学生信息查询 -选择菜单命令 8 ,提示输入学生学号,若该学号存在,则输出学生信息;否则提示没有找到并结束。 -Please Input your choice: 8 -Input the number you want to search:2214111011 -2214111011 ZhangYu 85 91 98 274 91 -1 Input record -2 Calculate total and average score of every course -3 Calculate total and average score of every student -4 Sort in descending order by score -5 Sort in ascending order by score -6 Sort in ascending order by number -7 Sort in dictionary order by name -8 Search by number -9 Search by name -10 Statistic analysis -11 List record -12 Write to a file -13 Read from a file -0 Exit -Please Input your choice: 8 -Input the number you want to search:2214111001 -Not found! -选择菜单命令 9 ,提示输入学生姓名,若该姓名存在,则输出学生信息;否则提示没有找到并结束。 -Please Input your choice: 9 -Input the name you want to search:LiYujia -2214111025 LiYujia 75 89 100 264 88 -1 Input record -2 Calculate total and average score of every course -3 Calculate total and average score of every student -4 Sort in descending order by score -5 Sort in ascending order by score -6 Sort in ascending order by number -7 Sort in dictionary order by name -8 Search by number -9 Search by name -10 Statistic analysis -11 List record -12 Write to a file -13 Read from a file -0 Exit -Please Input your choice: 9 -Input the name you want to search:SunYizhe -Not found! -C11: 统计各分数段学生人数及所占百分比 -选择菜单命令 10,提示输入学生成绩,通过循环得出各分数段学生人数及所占百分比 - -Please Input your choice: 10 -For course 1: -<60 0 0.00% -60-70 0 0.00% -70-80 2 50.00% -80-90 1 25.00% -90-100 0 0.00% -100 1 25.00% -For course 2: -<60 0 0.00% -60-70 0 0.00% -70-80 0 00.00% -80-90 2 50.00% -90-100 2 50.00% -100 0 0.00% -For course 3: -<60 0 0.00% -60-70 0 0.00% -70-80 0 0.00% -80-90 1 25.00% -90-100 2 50.00% -100 1 25.00% -C12: 打印学生信息 -选择菜单命令11,打印 - -Please Input your choice: 11 -2214111006 XuZilin 100 95 86 281 93 -2214111009 XuZigui 77 89 99 265 88 -2214111011 ZhangYu 85 91 98 274 91 -2214111025 LiYujia 75 89 100 264 88 -C13: 将学生信息保存在文件中 -选择菜单命令 12 ,将学生信息保存在文件 student.txt 中。如果文件不存在,则给出错误信息并退出程序,否则逐个读入 - -Please Input your choice: 12 -Failure to open score.txt! -1 Input record -2 Calculate total and average score of every course -3 Calculate total and average score of every student -4 Sort in descending order by score -5 Sort in ascending order by score -6 Sort in ascending order by number -7 Sort in dictionary order by name -8 Search by number -9 Search by name -10 Statistic analysis -11 List record -12 Write to a file -13 Read from a file -0 Exit -Please Input your choice: 12 -2214111006 XuZilin 100 95 86 281 93 -2214111009 XuZigui 77 89 99 265 88 -2214111011 ZhangYu 85 91 98 274 91 -2214111025 LiYujia 75 89 100 264 88 -C14:从文件中读取学生信息 -选择菜单命令 13 ,从文件中读取学生的学号、姓名及成绩等信息写入到结构体数组 stu 中。如果文件为空,则给出错误信息并退出程序,反之,逐个读入 - -Please Input your choice: 13 -Failure to open score.txt! -1 Input record -2 Calculate total and average score of every course -3 Calculate total and average score of every student -4 Sort in descending order by score -5 Sort in ascending order by score -6 Sort in ascending order by number -7 Sort in dictionary order by name -8 Search by number -9 Search by name -10 Statistic analysis -11 List record -12 Write to a file -13 Read from a file -0 Exit -Please Input your choice: 13 -2214111006 XuZilin 100 95 86 281 93 -2214111009 XuZigui 77 89 99 265 88 -2214111011 ZhangYu 85 91 98 274 91 -2214111025 LiYujia 75 89 100 264 88 -概要设计 -系统主要分为用户界面和数据处理两大模块。 -用户界面模块包括系统初始化(init),显示菜单(display_menu),选择菜单命令(make_choice)、确认(confirm)、退出(quit)等子模块。 -数据处理模块包括读取数据(read_data)、保存数据(save_data)、打印数据(print_data)、查询数据(query_data)、添加数据(add_data)、更新数据(update_data)、删除数据(delete_data)、数据排序(sort_data)和生成图表(make_chart)等子模块。其中查询、添加、更 -新和删除数据还会用到根据编号查询数据的方法(find)。 - -上述各模块通过主程序(main)进行调用,系统模块图如下。 - -系统模块图 - -各模块的主要功能如下: - -main -系统主函数模块,显示菜单,根据用户选择的菜单命令,执行相关操作。 - -init -系统初始化 - -menu -显示菜单命令 - -详细设计 -针对概要设计 - -main -Step 1:初始化 -Step 2:根据用户选择的命令执行相应的操作 -Step 2.1:显示菜单 -Step 2.2:选择菜单命令 c -Step 2.3:if c == 1 then ReadScore -Step 2.4:if c == 2 then AverSumofEveryStudent -Step 2.5:if c == 3 then AverSumofEveryCourse -Step 2.6:if c == 4 then SortbyScore(Descending) -Step 2.7:if c == 5 then SortbyScore(Ascending) -Step 2.8:if c == 6 then AsSortbyNum -Step 2.9:if c == 7 then SortbyName -Step 2.10:if c == 8 then SearchbyNum -Step 2.11:if c == 9 then SearchbyName -Step 2.12:if c == 10 then StatisticAnalysis -Step 2.13:if c == 11 then PrintScore -Step 2.14:if c == 12 then WritetoFile -Step 2.15:if c == 13 then ReadfromFile -Step 2.16:if c == 0 then exit - -系统模块图 - -ReadScore -Step 1:显示提示信息,要求输入学生的学号,姓名和成绩 -Step 2:利用循环,输入学生的学号,成绩和各科成绩 - -学生信息输入 - -AverSumofEveryStudent -Step 1:利用for循环给 sum 赋初值为 0 -Step 2:利用第二重循环重新计算每个学生的总分 -Step 3:计算每个学生的平均分 -Step 4:将结果按照舒徐,总分和平均分的顺序进行输出 - -计算每个学生各门课程的总分和平均分 - -AverSumofEveryCourse -SortbyScore -SortbyScore -AsSortbyNum -SortbyName -SearchbyNum -SearchbyName -StatisticAnalysis -PrintScore -WritetoFile -ReadfromFile -exit -代码实现 -// 头文件的使用 - -#include -#include -#include -// define定义的全局变量 - -#define MAX_LEN 10 //字符串最大长度 -#define STU_NUM 30 //最多的考试人数 -#define COURSE_NUM 6 //最多的考试科目 -// 结构体的定义 - -typedef struct student{ - long num; //每个学生的学号 - char name[MAX_LEN]; //每个学生的姓名 - float score[COURSE_NUM]; //每个学生COURSE_NUM门功课的成绩 - float sum; //每个学生的总成绩 - float aver; //每个学生的平均成绩 -}STU; -// 函数声明 - -int Menu(void); //菜单显示、用户输入函数 -void ReadScore(STU stu[],int n,int m); //学生成绩录入函数 -void AverSumofEveryStudent(STU stu[],int n,int m); //求每个学生总分和平均分的函数 -void AverSumofEveryCourse(STU stu[],int n,int m); //求每门课程总分和平均分的函数 -void SortbyScore(STU stu[],int n,int m,int (*compare)(float a,float b)); //选择法将数组 sum 的元素排序的函数 -int Ascending(float a,float b); //使数据按升序排序的函数 -int Descending(float a,float b); //使数据按降序排序的函数 -void SwapFloat(float *x,float *y); //用于交换两个单精度浮点数的函数 -void SwapLong(long *x,long *y); //用于交换两个长整型数据的函数 -void SwapChar(char x[],char y[]); //用于交换两个字符串的函数 -void AsSortbyNum(STU stu[],int n,int m); //选择法将数组 num 的元素值从低到高排序的函数 -void SortbyName(STU stu[],int n,int m); //交换法实现字符串按字典顺序排序的函数 -void SearchbyNum(STU stu[],int n,int m); //按学号查找学生成绩并显示查找结果的函数 -void SearchbyName(STU stu[],int n,int m); //按姓名的字典顺序排出成绩表的函数 -void StatisticAnalysis(STU stu[],int n,int m); //统计各分数段的学生人数及所占的百分比的函数 -void PrintScore(STU stu[],int n,int m); //打印学生成绩的函数 -void WritetoFile(STU record[],int n,int m); //输出学生信息到文件中的函数 -void ReadfromFile(STU record[],int *n,int *m); //从文件中读取学生信息的函数 -// 主函数 - -int main(void) -{ - char ch; - int n = 0,m = 0; - STU stu[STU_NUM]; - printf("Input student number(n<%d):",STU_NUM); - scnaf("%d",&n); - printf("Input course number(m<=%d):",COURSE_NUM); - scanf("%d",&m); - while(1) - { - ch = Menu(); //显示菜单,并读取用户输入 - switch(ch) - { - case 1:ReadScore(stu,n,m); - break; - case 2:AverSumofEveryCourse(stu,n,m); - break; - case 3:AverSumofEveryStudent(stu,n,m); - break; - case 4:SortbyScore(stu,n,m,Descending); - printf("\nSort in descending order by score:\n"); - PrintScore(stu,n,m); - break; - case 5:SortbyScore(stu,n,m,Ascending); - printf("\nSort in ascending order by number:\n"); - PrintScore(stu,n,m); - break; - case 6:AsSortbyNum(stu,n,m); - printf("\nSort in ascending order by number:\n"); - PrintScore(stu,n,m); - break; - case 7:SortbyName(stu,n,m); - printf("\nSort in dictionary order by name:\n"); - PrintScore(stu,n,m); - break; - case 8:SearchbyNum(stu,n,m); - break; - case 9:SearchbyName(stu,n,m); - break; - case 10:StatisticAnalysis(stu,n,m); - break; - case 11:PrintScore(stu,n,m); - break; - case 12:WritetoFile(stu,n,m); - break; - case 13:ReadfromFile(stu,&n,&m); - break; - case 0: printf("Are you sure you want to exit?(Y/N):"); - printf("End of program!); - exit(0); - default:printf("Input error!"); - } - } - return 0; -} -// 函数功能:显示菜单并获得用户键盘输入的选项 - -int Menu(void) -{ - int itemSelected; - printf("Management for Students' scores\n"); - printf("1 Input record\n"); - printf("2 Calculate total and average score of every course\n"); - printf("3 Calculate total and average score of every student\n"); - printf("4 Sort in descending order by score\n"); - printf("5 Sort in ascending order by score\n"); - printf("6 Sort in ascending order by number\n"); - printf("7 Sort in dictionary order by name\n"); - printf("8 Search by number\n"); - printf("9 Search by name\n"); - printf("10 Statistic analysis\n"); - printf("11 List record\n"); - printf("12 Write to a file\n"); - printf("13 Read from a file\n"); - printf("0 Exit\n"); - printf("Please Input your choice:"); - scanf("%d",&itemSelected); //读入用户输入 - return itemSelected; -} -// 函数功能:输入 n 个学生的 m 门课成绩 - -void ReadScore(STU stu[],int n,int m) -{ - int i,j; - printf("Input student's ID ,name and score:\n"); - for(i=0,i0 ? stu[i].sum /m : -1; - printf("student %d: sum = %.0f,aver = %.0f\n",i+1,stu[i].sum,stu[i].aver); - } -} -//函数功能:计算每门课程的总分和平均分 - -void AverSumofEveryCourse(STU stu[],int n,int m) -{ - int i,j; - float sum[COURSE_NUM],aver[COURSE_NUM]; - for(j=0;j b; // 这样比较决定了按降序排序,如果 a>b,则交换 -} -//交换两个单精度浮点型数据 - -void SwapFloat(float *x,float *y) -{ - float temp; - temp = *x; - *x = *y; - *y = temp; -} -//交换两个长整型数据 - -void SwapLong(long *x,long *y) -{ - long temp; - temp = *x; - *x = *y; - *y = temp; -} -//交换两个字符串 - -void SwapChar(char x[],chary[]) -{ - char temp[MAX_LEN]; - strcpy(temp, x); - strcpy(x, y); - strcpy(y, temp); -} -//函数功能:按选择法将数组 num 的元素从低到高排序 - -void AsSortbyNum(STU stu[],int n,int m) -{ - int i, j, k, t; - for (i=0; i=0&&stu[i].score[j]<60) t[0]++; - else if(stu[i].score[j]<70) t[1]++; - else if(stu[i].score[j]<80) t[2]++; - else if(stu[i].score[j]<90) t[3]++; - else if(stu[i].score[j]<100) t[4]++; - else if(stu[i].score[j]==100) t[5]++; - } - for(i=0;i<=5;i++) - { - if(i==0) printf("<60\t%d\t%.2f%%\n",t[i],(float)t[i]/n*100); - else if(i==5) printf("%d\t%d\t%.2f%%\n",(i+5)*10,t[i],(float)t[i]/n*100); - else printf("%d-%d\t%d\t%.2f%%\n",(i+5)*10,(i+5)*10+9,t[i],(float)t[i]/n*100); - } - } -} -//函数功能:打印学生成绩 - -void PrintScore(STU stu[],int n,int m) -{ - int i,j; - for (i=0; i b,则按降序排序。选择菜单命令 5,按选择法将数组sum的元素值按降序进行排序,显示提示信息,最后打印出学生成绩。 -```` - 请输入你的选择: 4 - 按分数降序排序: - 2214111038 ZhangTongtong 100 95 86 281 93 - 2214111018 LiYuxuan 85 91 98 274 91 - 2214111026 MengTingyu 77 89 99 265 88 - 2214111022 ZhouYufan 75 89 100 264 88 - 请输入你的选择: 5 - 按分数升序排列: - 2214111022 ZhouYufan 75 89 100 264 88 - 2214111026 MengTingyu 77 89 99 265 88 - 2214111018 LiYuxuan 85 91 98 274 91 - 2214111038 ZhangTongtong 100 95 86 281 93 -```` - - c8:学号顺序排序 - 选择菜单命令 6,按学号从小到大进行排序,显示提示信息,最后打印学生信息。 - ```` - - 请输入你的选择: 6 - 按学号降序排列: - 2214111018 LiYuxuan 85 91 98 274 91 - 2214111022 ZhouYufan 75 89 100 264 88 - 2214111026 MengTingyu 77 89 99 265 88 - 2214111038 ZhangTongtong 100 95 86 281 93 - ```` -C9: 姓名顺序排序 -选择菜单命令 7 ,按姓名的字典顺序进行排序,显示提示信息,最后打印学生信息。 -```` -请输入你的选择: 7 -按名称按字典顺序排序: -2214111018 LiYuxuan 75 89 100 264 88 -2214111022 ZhouYufan 77 89 99 265 88 -2214111026 MengTingyu 100 95 86 281 93 -2214111038 ZhangTongtong 85 91 98 274 91 -```` -C10: 学生信息查询 -选择菜单命令 8 ,提示输入学生学号,若该学号存在,则输出学生信息;否则提示没有找到并结束。 -```` -请输入你的选择: 8 -输入你想搜寻的学号:2214111018 -2214111018 LiYuxuan 75 89 100 264 88 -1 输入成绩 -2 计算每门课程的总分和平均分 -3 计算每名学生的总分和平均分 -4 按分数降序排序 -5 按分数升序排序 -6 按学号升序排序 -7 按名称按字典顺序排序 -8 按数字搜索 -9 按名字搜索 -10 统计分析 -11 列表记录 -12 写一个文件 -13 从文件中读取 -0 退出 -请输入你的选择: 8 -输入你想搜寻的学号:2214111001 -没有找到! -选择菜单命令 9 ,提示输入学生姓名,若该姓名存在,则输出学生信息;否则提示没有找到并结束。 -请输入你的选择: 9 -输入你想搜寻的名字:ZhangTongtong -2214111038 ZhangTongtong 85 91 98 274 91 -1 输入分数 -2 计算每门课程的总分和平均分 -3 计算每名学生的总分和平均分 -4 按分数降序排序 -5 按分数升序排序 -6 按学号升序排序 -7 按名称按字典顺序排序 -8 通过学号搜索 -9 通过姓名搜素 -10 统计分析 -11 列表记录 -12 写一个文件 -13 从文件中读取 -0 退出 -请输入你的选择: 9 -请输入你想搜索的名字:GuoJiahui -Not found! -```` -C11: 统计各分数段学生人数及所占百分比 -选择菜单命令 10,提示输入学生成绩,通过循环得出各分数段学生人数及所占百分比 -```` -请输入你的选择: 10 -关于课程1: -<60 0 0.00% -60-70 0 0.00% -70-80 2 50.00% -80-90 1 25.00% -90-100 0 0.00% -100 1 25.00% -For course 2: -<60 0 0.00% -60-70 0 0.00% -70-80 0 00.00% -80-90 2 50.00% -90-100 2 50.00% -100 0 0.00% -For course 3: -<60 0 0.00% -60-70 0 0.00% -70-80 0 0.00% -80-90 1 25.00% -90-100 2 50.00% -100 1 25.00% -```` -C12: 打印学生信息 -选择菜单命令11,打印 -```` -请输入你的选择:11 -2214111018 李玉璇 100 95 86 281 93 -2214111038 张桐桐 77 89 99 265 88 -2214111026 孟婷玉 85 91 98 274 91 -2214111022 周羽凡 75 89 100 264 88 -```` -C13: 将学生信息保存在文件中 -选择菜单命令 12 ,将学生信息保存在文件 student.txt 中。如果文件不存在,则给出错误信息并退出程序,否则逐个读入 -```` -请输入你的选择:12 -未能打开你的成绩! -1 输入成绩 -2 计算所有课程的总分和平均值 -3 计算所有学生的总分和平均值 -4 按分数降序排列 -5 按分数升序排列 -6 按数字升序排列 -7 按名字字母排列 -8 按数字搜索 -9 按名字搜索 -10 统计分析 -11 列表记录 -12 写入文件 -13 从文件中读取 -0 退出 -请输入你的选择:12 -2214111018 李玉璇 100 95 86 281 93 -2214111038 张桐桐 77 89 99 265 88 -2214111026 孟婷玉 85 91 98 274 91 -2214111022 周羽凡 75 89 100 264 88 - -```` -C14:从文件中读取学生信息 -选择菜单命令 13 ,从文件中读取学生的学号、姓名及成绩等信息写入到结构体数组 stu 中。如果文件为空,则给出错误信息并退出程序,反之,逐个读入 -```` -请输入你的选择:13 -未能打开你的成绩! -1 输入成绩 -2 计算所有课程的总分和平均值 -3 计算所有学生的总分和平均值 -4 按分数降序排列 -5 按分数升序排列 -6 按数字升序排列 -7 按名字字母排列 -8 按数字搜索 -9 按名字搜索 -10 统计分析 -11 列表记录 -12 写入文件 -13 从文件中读取 -0 退出 -请输入你的选择:12 -2214111018 李玉璇 100 95 86 281 93 -2214111038 张桐桐 77 89 99 265 88 -2214111026 孟婷玉 85 91 98 274 91 -2214111022 周羽凡 75 89 100 264 88 - -```` - -概要设计 -系统主要分为用户界面和数据处理两大模块。 -用户界面模块包括输入学生成绩(ReadScore)、计算学生总分和平均分(AverSumofEveryStudent)、计算总分和平均分(AverSumofEveryCourse)、按选择发将数组元素排序(Sortbyscore)、使数据按升序排序(Ascending)、使数据按降序排序(Descending)、交换单精度浮点数据(SwapFloat)、交换长整型数据(SwapLong)、交字符串(SwapChar)、按选择法将数组元素按从低到高排序、交换实现字符串按字典顺序排序(SortbyName)、按学号查找学生成绩并显示查找结果SearchbyNum)、按姓名的字典顺序排出成绩表 、统计各分数段的学生人数及所占的百分比 、打印学生成绩 、输出学生的学号、姓名及课程的成绩到文件student.txt中 、从文件中读取学生的学号、姓名及成绩等信息写入到结构体数组stu中 - -上述各模块通过主程序(main)进行调用,系统模块图如下。 - -![添加库存记录流程图](ztt2.drawio.svg) - -各模块的主要功能如下: - -# main -系统主函数模块,显示菜单,根据用户选择的菜单命令,执行相关操作。 - -# init -系统初始化 - -#menu -显示菜单命令 - -#详细设计 -针对概要设计 -#main -Step 1:初始化 -Step 2:根据用户选择的命令执行相应的操作 -Step 2.1:显示菜单 -Step 2.2:选择菜单命令 c -Step 2.3:if c == 1 then ReadScore -Step 2.4:if c == 2 then AverSumofEveryStudent -Step 2.5:if c == 3 then AverSumofEveryCourse -Step 2.6:if c == 4 then SortbyScore(Descending) -Step 2.7:if c == 5 then SortbyScore(Ascending) -Step 2.8:if c == 6 then AsSortbyNum -Step 2.9:if c == 7 then SortbyName -Step 2.10:if c == 8 then SearchbyNum -Step 2.11:if c == 9 then SearchbyName -Step 2.12:if c == 10 then StatisticAnalysis -Step 2.13:if c == 11 then PrintScore -Step 2.14:if c == 12 then WritetoFile -Step 2.15:if c == 13 then ReadfromFile -Step 2.16:if c == 0 then exit -![详细设计](lyx.drawio.svg) - -```` -系统模块图 -```` -1·输入n个学生的m门课成绩 -ReadScore -Step 1:显示提示信息,要求输入学生的学号,姓名和成绩 -Step 2:利用循环,输入学生的学号,成绩和各科成绩 - -![信息存入](ztt4.drawio.svg) - -2·计算每个学生各门课程的总分和平均分 -AverSumofEveryStudent -step1输入一门学生的成绩 -step2将学生成绩相加,输出总分 -step3输出课程平均值 -step4输入下一门课程 - -![总分平均分](ztt1.drawio.svg) -```` -3·计算每门课程的总分和平均分 -AverSumofEveryCourse -step1输入第一门课程的所有学生的成绩 -step2将成绩相加,输出科目总分 -step3总分/人数,输出课程平均分 -step4输入下一个科目 -```` -![课程总分平均分](ztt5.drawio.svg) -```` -4·按选择法将数组sum的元素值排序 -SortbyScore -Step 1:利用循环将i赋值给k -Step 2:用循环从i+1到n-1比较,将较小的赋给k -Step 3:如果k与i不相等,每一课的成绩交换,总分,平均分,学号,姓名依次交换 -```` -![排序](sortbyscore.drawio.svg) - -```` -5·按选择法将数组num的元素值按从低到高排序 -AsSortbyNum -step 1:对前两元素进行比较 -step 2:如果前一个数大于后一个数,则把前数放在前面 -step 3:对上一操作进行循环,依次比较 -step 4:最后依次罗列元素 -```` -![num排序](mty5.drawio.svg) -```` -6·交换法实现字符串按字典顺序排序 -SortbyName -step 1:对前两元素进行比较 -step 2:如果前一个数大于后一个数,则把两数交换 -step 3:对上一操作进行循环,交换位置的索引 -step 4:最后依次罗列元素 -```` -![字符串排序](mty6.drawio.svg) -```` -7.按学号查找学生成绩并显示查找结果 -SearchbyNum -8·按姓名的字典顺序排出成绩表 -SearchbyName -```` -![字符串排序](mty8.drawio.svg) -```` -9·统计各分数段的学生人数及所占的百分比 -StatisticAnalysis -step1:输入每个学生的成绩 -step2:判断输入成绩所在的分数段 -step3:将各个分数段的成绩个数除以学生总人数并乘以百分百 -```` -![百分百](zyf9.drawio.svg) -```` -10·打印学生成绩 -PrintScore -step1:输入学生的学号,姓名. -step2:查找该学生的成绩 -step3:输出该学生的成绩 -```` -![打印](zyf10.drawio.svg) -```` -11·输出n个学生的学号、姓名及m门课程的成绩到文件student.txt中 -WritetoFile -step1:输入学生的学号和姓名 -step2:查找该学生的所有课程成绩 -step3:将成绩保存到文件student.txt中 -```` -![输出](zyf11.drawio.svg) -```` -12·从文件中读取学生的学号、姓名及成绩等信息写入到结构体数组stu中 -ReadfromFile -step1:查找文件 -step2:从文件中读取学生的学号姓名成绩 -step3:将信息写入到数组stu中 -```` -![读取](zyf12.drawio.svg) - -exit -````` - -代码实现 -// 头文件的使用 - -下面是代码库 -````c - -#include -#include -#include -#define MAX_LEN 10 // 字符串最大长度 -#define STU_NUM 30 // 最多的学生人数 -#define COURSE_NUM 6 // 最多的考试科目数 -typedef struct student -{ - long num; // 每个学生的学号 - char name[MAX_LEN]; // 每个学生的姓名 - float score[COURSE_NUM]; // 每个学生COURSE_NUM门功课的成绩 - float sum; // 每个学生的总成绩 - float aver; // 每个学生的平均成绩 -}STU; -int Menu(void); -void ReadScore(STU stu[], int n, int m); -void AverSumofEveryStudent(STU stu[], int n, int m); -void AverSumofEveryCourse(STU stu[], int n, int m); -void SortbyScore(STU stu[],int n,int m,int (*compare)(float a,float b)); -int Ascending(float a, float b); -int Descending(float a, float b); -void SwapFloat(float *x, float *y); -void SwapLong(long *x, long *y); -void SwapChar(char x[], char y[]); -void AsSortbyNum(STU stu[], int n, int m); -void SortbyName(STU stu[], int n, int m); -void SearchbyNum(STU stu[], int n, int m); -void SearchbyName(STU stu[], int n, int m); -void StatisticAnalysis(STU stu[], int n, int m); -void PrintScore(STU stu[], int n, int m); -void WritetoFile(STU record[], int n, int m); -void ReadfromFile(STU record[], int *n, int *m); -int main(void) -{ - char ch; - int n = 0, m = 0; - STU stu[STU_NUM]; -printf("Input student number(n<%d):", STU_NUM); - scanf("%d", &n); -printf("Input course number(m<=%d):",COURSE_NUM); - scanf("%d", &m); - while (1) - { - ch = Menu(); // 显示菜单,并读取用户输入 - switch (ch) - { - case 1:ReadScore(stu, n, m); - break; - case 2: AverSumofEveryCourse(stu, n, m); - break; - case 3: AverSumofEveryStudent(stu, n, m); - break; - case 4: SortbyScore(stu, n, m, Descending); - printf("\nSort in descending order by score:\n"); - PrintScore(stu, n, m); - break; - case 5: SortbyScore(stu, n, m, Ascending); - printf("\nSort in ascending order by score:\n"); - PrintScore(stu, n, m); - break; - case 6: AsSortbyNum(stu, n, m); - printf("\nSort in ascending order by number:\n"); - PrintScore(stu, n, m); - break; - case 7: SortbyName(stu, n, m); - printf("\nSort in dictionary order by name:\n"); - PrintScore(stu, n, m); - break; - case 8: SearchbyNum(stu, n, m); - break; - case 9: SearchbyName(stu, n, m); - break; - case 10: StatisticAnalysis(stu, n, m); - break; - case 11:PrintScore(stu, n, m); - break; -case 12:WritetoFile(stu, n, m); - break; - case 13:ReadfromFile(stu, &n, &m); - break; - case 0: printf("End of program!"); - exit(0); - default:printf("Input error!"); - } - } - return 0;} -// 函数功能:显示菜单并获得用户键盘输入的选项 -int Menu(void) -{ - int itemSelected; - printf("Management for Students' scores\n"); - printf("1.Input record\n"); - printf("2.Calculate total and average score of every course\n"); - printf("3.Calculate total and average score of every student\n"); - printf("4.Sort in descending order by score\n"); - printf("5.Sort in ascending order by score\n"); - printf("6.Sort in ascending order by number\n"); - printf("7.Sort in dictionary order by name\n"); - printf("8.Search by number\n"); - printf("9.Search by name\n"); - printf("10.Statistic analysis\n"); - printf("11.List record\n"); - printf("12.Write to a file\n"); - printf("13.Read from a file\n"); - printf("0.Exit\n"); - printf("Please Input your choice:"); - scanf("%d", &itemSelected); // 读入用户输入 - return itemSelected; -} -//1 函数功能:输入n个学生的m门课成绩 -void ReadScore(STU stu[], int n, int m) -{ - int i, j; - printf("Input student's ID, name and score:\n"); - for(i=0;i0 ? stu[i].sum / m : -1; - printf("student %d: sum = %.0f, aver = %.0f\n", -i+1, stu[i].sum, stu[i].aver); - } -} -//3 函数功能:计算每门课程的总分和平均分 - -//4 函数功能:按选择法将数组sum的元素值排序 - -// 5使数据按升序排序 -int Ascending(float a, float b) -{ - return a < b; // 这样比较决定了按升序排序,如果a b; -} -// 7交换两个单精度浮点型数据 - -// 8交换两个长整型数据 - -// 9交换两个字符串 -void SwapChar(char x[], char y[]) -{ -char temp[MAX_LEN]; -strcpy(temp, x); -strcpy(x, y); -strcpy(y, temp); -} -// 10函数功能:按选择法将数组num的元素值按从低到高排序 - -// 11函数功能:交换法实现字符串按字典顺序排序 -void AsSortbyNum(STU stu[], int n, int m) -{ - int i, j, k, t; - for (i=0; i=0 && stu[i].score[j]<60)t[0]++; - else if (stu[i].score[j]<70) t[1]++; - else if (stu[i].score[j]<80) t[2]++; - else if (stu[i].score[j]<90) t[3]++; - else if (stu[i].score[j]<100) t[4]++; - else if (stu[i].score[j] == 100) t[5]++; - } - for (i=0; i<=5; i++) - { - if (i==0) printf("<60\t%d\t%.2f%%\n",t[i],(float)t[i]/n*100); - else if (i==5) printf("%d\t%d\t%.2f%%\n", -(i+5)*10,t[i],(float)t[i]/n*100); - else printf("%d-%d\t%d\t%.2f%%\n", -(i+5)*10, (i+5)*10+9, t[i], (float)t[i]/n*100); - } - } -} - -// 15函数功能: 打印学生成绩 -void PrintScore(STU stu[], int n, int m) -{ - int i, j; - for (i=0; i