{"id":19848433,"url":"https://github.com/wwwwwydev/student-administration","last_synced_at":"2026-04-29T21:06:33.735Z","repository":{"id":231282210,"uuid":"781358050","full_name":"WwwwwyDev/student-administration","owner":"WwwwwyDev","description":"学生管理系统(适合c语言入门学习)   Student Management System (Suitable for Beginner C Language Learning)","archived":false,"fork":false,"pushed_at":"2024-04-03T08:35:32.000Z","size":1789,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-23T21:44:01.560Z","etag":null,"topics":["c","cpp","golang","python"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/WwwwwyDev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-04-03T08:24:46.000Z","updated_at":"2024-04-08T09:07:50.000Z","dependencies_parsed_at":"2024-04-08T12:15:07.997Z","dependency_job_id":null,"html_url":"https://github.com/WwwwwyDev/student-administration","commit_stats":null,"previous_names":["wwyd123456/student-administration","devwwy/student-administration","wwwwwydev/student-administration"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/WwwwwyDev/student-administration","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WwwwwyDev%2Fstudent-administration","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WwwwwyDev%2Fstudent-administration/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WwwwwyDev%2Fstudent-administration/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WwwwwyDev%2Fstudent-administration/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/WwwwwyDev","download_url":"https://codeload.github.com/WwwwwyDev/student-administration/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WwwwwyDev%2Fstudent-administration/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32443618,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T20:22:27.477Z","status":"ssl_error","status_checked_at":"2026-04-29T20:22:26.507Z","response_time":110,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","cpp","golang","python"],"created_at":"2024-11-12T13:17:11.595Z","updated_at":"2026-04-29T21:06:33.695Z","avatar_url":"https://github.com/WwwwwyDev.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# **程序设计报告**\n\n\n#### 题目\n\n学生成绩管理程序 \n\n\n#### 要求\n\n本程序用于教学单位（院/系）的学生成绩管理。要求程序能够实现学生信息录入（可以实现增加、删除、修改学生的基本信息）、单科学习成绩的录入；班级内单科成绩排名；成绩查询：查询某个学生的各科成绩、统计所有不及格科目超过2科的学生名单。\n\n#### 设计思路\n\n按照要求设计多种功能函数，并利用主函数实现功能，添加可视化操作提示。\n\n#### 数据结构\n\n利用链式线性结构体Stu数据域存储学生信息，学生姓名、班级、年级、学生各科成绩为字符串型，学生编号为整型，指针域存储下一个指针地址。\n\n#### 流程图\n\n![图床链接过期](https://gitee.com/wu_wen_yi/student-administration/raw/master/img-folder/Tree.jpg)\n\n#### 功能及函数介绍\n\n##### 链表操作函数\n\n###### （1）尾插法\n\n```c\nvoid AddItem(Stu *plist) ;//尾插添加结点：传入需要添加结点的数量和头指针，从头指针遍历到尾结点，并从尾结点开始用malloc函数添加结点，添加完后将尾结点的指针域指向NULL\n```\n\n###### （2）遍历结点\n\n```c\nStu *NextItem(Stu *plist) ;//传入当前结点，传出下一结点\n```\n\n###### （3）链表初始化\n\n```c\nStu *InitList(int num);//初始化链表：利用malloc函数创建头指针，并将头指针编号为0，将头指针指针域指向NULL，并向后添加num个结点，并返回头指针\n```\n\n###### （4）寻找结点\n\n```c\nStu *SearchItem(int num,Stu *phead);//寻找结点：传入头指针，返回编号为num的结点位置\n```\n\n##### 功能函数\n\n###### （1）输出所有学生信息\n\n```c\n void ShowItem(Stu *p_list,Stu *p_head);//传入指针，输出其数据域学生信息\n```\n\n###### （2） 初始化程序\n\n```c\nvoid InitSys(Stu *p_head);//初始化学生系统后，管理员输入数据层\n```\n\n###### （3） 保存文件(二进制)\n\n```c\nvoid SaveFile(Stu *p_head);//保存文件，用wb打开文件，并利用fwrite函数写入fwrite(1,2,3,4); 参数说明：1.要写入的数据的地址，2.一次要写多少字节，3.写多少次，4.写到哪里\n```\n\n###### （4） 学生总排名\n\n```c\nint Sort(Stu *p_head,int n_ID,int n_subject) ;//院系总排名，传入头指针、学生编号、所要排名的数据类型，用SearchItem()函数检索该编号数据地址，并从头遍历链表到NULL，对每一个结点该数据值进行检索，遇到比被排序结点数值大时sum+1\n```\n\n###### （5）学生所在班级排名\n\n```c\n int ClassSort(Stu *p_head,int n_ID,int n_subject) ;//班级排名，传入头指针、学生编号、所要排名的数据类型，同（4）类似，只是判断了班级是否相等，利用了strcmp()库函数，包含了\u003cstring.h\u003e头文件\n```\n\n###### （6）查找学生\n\n```c\n void Search(Stu *p_head,char *name);  //搜索学生信息，传入头指针，传入学生姓名，遍历链表，找到该学生（考虑了重名情况）\n```\n\n###### （7）删除学生信息\n\n```c\n void Del(Stu *p_head,int n_ID); //删除表，传入头指针，传入删除学生编号。用free（）释放内存，包含头文件\u003cstdlib\u003e,并将前后结点相连，利用了SearchItem()函数找到3个结点地址\n```\n\n###### （8）将字符串转为double型\n\n```c\n double Strtodouble(char *str) ;//传入0-100的字符串返回double型函数，若传入其他字符串，则返回-1。主要用于符合成绩逻辑，利用了atof()函数，包含头文件\u003cstdlib\u003e\n```\n\n###### （9）添加学生\n\n```c\n void AddList(Stu *p_head) ;//尾部添加新同学\n```\n\n###### （10）修改学生信息\n\n```c\nvoid Change(Stu *p_head);//修改学生信息，利用SearchItem（）函数\n```\n\n###### （11）统计所有不及格科目超过2科的学生名单\n\n```c\nvoid NoPass(Stu *p_head);//传入头指针，输出所有不及格科目超过2科的学生名单，从头开始遍历判断\n```\n\n###### （12）单科学习成绩的录入\n\n```c\nvoid InputScore(Stu *start , Stu *end , Stu *p_head ,char *subject);//单科学习成绩录入，传入开始录入位置和结束录入位置，传入头指针 ,传入需要录入的学科\n```\n\n###### （13）保存文件(txt)\n\n```c\nvoid Fprint(Stu *p_head);//将数据导出到当前路径下的StudentInformation.txt，导出为txt便于使用者阅读\n```\n\n###### （14）输出单个学生信息\n\n```c\nvoid ShowItem(Stu *p_list,Stu *p_head) ;//传入结点地址，输出其数据域学生信息\n```\n\n###### （15）班级内单科成绩排名\n\n```c\nvoid ClassSortOutput(Stu *p_head,char *str_class,int subject);//传入头指针，传入班级，传入学科 利用了桶排序思想\n```\n\n###### （16）插入学生\n\n```c\nvoid Insert(Stu *p_head) ;//在中间插入一个表，找到前后结点，free()并将前中后结点关联，并将后续结点编号加一\n```\n\n#### 功能测试\n\n###### （1）存在数据文件时对数据读取并进入主菜单\n\n![图床链接过期](https://gitee.com/wu_wen_yi/student-administration/raw/master/img-folder/MainMenu.PNG)\n\n###### （2）不存在数据时初始化系统\n\n![图床链接过期](https://gitee.com/wu_wen_yi/student-administration/raw/master/img-folder/Init.PNG)\n\n###### （3）学生菜单\n\n![图床链接过期](https://gitee.com/wu_wen_yi/student-administration/raw/master/img-folder/StudentMenu.PNG)\n\n###### （4）管理员菜单（需输入密匙）\n\n![图床链接过期](https://gitee.com/wu_wen_yi/student-administration/raw/master/img-folder/AdminMenu.PNG)\n\n###### （5）输出所有学生信息\n\n![图床链接过期](https://gitee.com/wu_wen_yi/student-administration/raw/master/img-folder/PutOut.PNG)\n\n###### （6）查找学生\n\n![图床链接过期](https://gitee.com/wu_wen_yi/student-administration/raw/master/img-folder/Search.PNG)\n\n###### （7）输出两门以上不及格学生名单\n\n![图床链接过期](https://gitee.com/wu_wen_yi/student-administration/raw/master/img-folder/Nopass.PNG)\n\n###### （8）输出班级单科排名\n\n![图床链接过期](https://gitee.com/wu_wen_yi/student-administration/raw/master/img-folder/Sort.PNG)\n\n###### （9）添加学生\n\n![图床链接过期](https://gitee.com/wu_wen_yi/student-administration/raw/master/img-folder/Add.PNG)\n\n###### （10）删除学生\n\n![图床链接过期](https://gitee.com/wu_wen_yi/student-administration/raw/master/img-folder/Del.PNG)\n\n###### （11）修改学生信息\n\n![图床链接过期](https://gitee.com/wu_wen_yi/student-administration/raw/master/img-folder/Change.PNG)\n\n###### （12）单科成绩录入\n\n![图床链接过期](https://gitee.com/wu_wen_yi/student-administration/raw/master/img-folder/ScoreInput.PNG)\n\n###### （13）插入学生\n\n![图床链接过期](https://gitee.com/wu_wen_yi/student-administration/raw/master/img-folder/Insert.PNG)\n\n###### （14）保存为txt\n\n![图床链接过期](https://gitee.com/wu_wen_yi/student-administration/raw/master/img-folder/Save.PNG)\n\n#### 遇到的问题和异常处理方法\n\n###### （1）对输入int型变量的控制:\n\n```c\nif(scanf(\"%d\",\u0026num)!=1)  \n{\nprintf(\"提示：你没有输入正确值，请重新输入:\");\nfflush(stdin);//while(getchar()!='\\n'); \n}\n```\n\n能解决输入非int型变量时，程序崩溃问题\n\n###### （2）对输入字符串的问题：\n\n利用gets()函数输入，可以读入空格，防止缓冲区同时读入多个数据。\n\n###### （3）\n\n```c\nfflush(stdin);\n```\n\n读入int型等变量时会将换行符读入，利用这个函数可以将缓冲区换行符清除。Stdin指缓冲区\n\n###### （4）对成绩判断问题:\n\n```c\nwhile(Strtodouble(p_new-\u003em_nMath) == -1)\n{    \nprintf(\"提示:您的输入有问题(成绩为0-100的整数),请重新输入:\"); \ngets(p_new-\u003em_nMath);\n}\n```\n\n利用Strtodouble函数对成绩输入判断，如果错误则重新输入\n\n###### （5）对指针的判断：\n\n遇到指针为NULL时，设置返回值，防止异常\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwwwwwydev%2Fstudent-administration","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwwwwwydev%2Fstudent-administration","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwwwwwydev%2Fstudent-administration/lists"}