c语言编写的学生成绩管理系统
C语言课程设计学生成绩管理系统

C语言课程设计学生成绩管理系统在当今数字化的时代,学生成绩管理系统对于学校和教育机构来说至关重要。
它不仅能够提高教学管理的效率,还能为教学决策提供有力的数据支持。
本次 C 语言课程设计的目标就是创建一个功能齐全、操作便捷的学生成绩管理系统。
一、系统需求分析首先,明确系统需要实现的基本功能。
包括学生信息的录入,如姓名、学号等;课程信息的设置,如课程名称、学分等;成绩的录入、修改和查询;以及成绩的统计分析,如计算平均分、排名等。
同时,系统应具备良好的用户界面,操作简单易懂,方便教师和管理人员使用。
对于数据的存储和管理,要保证数据的安全性和完整性,防止数据丢失或被篡改。
二、系统设计(一)数据结构设计选择合适的数据结构来存储学生、课程和成绩信息。
可以使用结构体来定义学生和课程的数据类型,使用数组或链表来存储多个学生和课程的信息。
例如,定义学生结构体如下:```ctypedef struct student {int id;char name50;float scores10; //假设最多 10 门课程} Student;```(二)功能模块设计将系统划分为多个功能模块,如录入模块、查询模块、修改模块、统计模块等。
每个模块负责完成特定的功能,模块之间相互独立,便于代码的维护和扩展。
录入模块负责接收用户输入的学生、课程和成绩信息,并进行合法性检查。
查询模块可以根据用户输入的条件,如学号、姓名、课程名称等,查询相应的学生成绩信息。
修改模块允许用户对已录入的成绩进行修改,但需要进行权限验证。
统计模块用于计算学生的平均分、总分,并进行排名。
(三)界面设计设计简洁明了的用户界面,使用菜单选项让用户选择不同的功能。
可以使用控制台输入输出的方式,也可以考虑使用图形界面库来实现更友好的界面。
三、系统实现(一)数据输入与存储使用文件来存储学生成绩数据,便于数据的持久化。
在程序启动时,读取文件中的数据;在程序结束时,将修改后的数据保存回文件。
c语言学生成绩管理系统含源代码

C 语言程序设计作业一设计项目:学生成绩管理系统二总体设计:1 程序设计组成框图:2:模块功能说明:1 输入功能:输入学生姓名学号及成绩。
2 查看功能:输出姓名学号及各科成绩。
3 查询功能:通过学号查询学生姓名及各科成绩。
4 统计功能:统计班级学生及格率,优秀率,各个学生成绩方差等。
5 修改功能:通过输入学号修改指定学生的错误信息。
6添加功能:添加学生信息。
7删除功能:通过输入学号输入指定学生信息。
8保存功能:将学生信息保存。
9 退出系统。
3:主要函数之间的调用关系及各自功能:主要函数的函数原型void inputscore(void);void savescore(void);void avergescore(void);void modifyscore(void);void lookscore(void);void searchscore(void);void statistic(void);void add(void);void modify(void);void delscore(void);void menu(void);i.在菜单界面输入1,调用函数inputscore( )实现输入学生成绩信息功能。
ii.在菜单界面2,调用函数lookscore( )实现学生成绩按平均分高低排序输。
出,同时lookscore()函数调用avergescore()函数实现各个学生平均分的计算。
iii.在菜单界面输入3,调用searchscore()函数实现通过学号查找学生成绩信息功能。
iv.在菜单界面输入4,调用statistic()函数输出班级及格率,优秀率,学生成绩方差,不及格学生名单。
v.在菜单界面输入5,调用modify()函数实现通过学号修改学生成绩的功能vi.在菜单界面输入6,调用add()函数实现添加学生成绩。
vii.在菜单界面输入7,调用delscore()函数实现删除指定学生成绩。
viii.在菜单界面输入8,调用savescore()函数将学生成绩信息保存。
学生成绩管理系统C语言源程序

for(p=head->next;p!=NULL&&strcmp(p->name,tem);p=p->next);
if (!p)
{
printf("\n\n找不到你要查询的姓名,请重新输入,输入0表\
示结束:");
scanf("%s",tem);
}
else if (!strcmp(p->name,tem))
n=0;
head=(Student *)malloc(LEN);
p2=head;
printf("\n请输入第%d名学生的学号,学号为0表示结束输入:",n+1);
scanf("%d",&flag);
while(getchar()!='\n');
for(;flag;)
{
n++;
p1=(Student *)malloc(LEN);
char xueqi[20];
int score[4];
int sum;
struct student *next;
}Student;
int n;
Student *cin(void);
Student *sort_1(Student *head,int);
void sort_2(Student *head);
max_3=min_3=p->score[2];max_2=min_2=p->score[3];
max_sum=min_sum=p->sum;
for(;p;p=p->next)
{
if (max_1<p->score[0]) max_1=p->score[0];
C语言课程设计_学生成绩管理系统

部署步骤:安装 操作系统、安装 数据库、安装应 用软件等
维护方案:定期 备份数据、定期 检查系统、定期 更新软件等
系统维护方案
定期备份数据: 确保数据安全, 防止数据丢失
定期更新系统: 确保系统安全, 防止病毒和恶意 软件攻击
定期检查硬件: 确保硬件正常运 行,防止硬件故 障
定期培训员工: 确保员工熟悉系 统操作,提高工 作效率
06 系统测试与优化
单元测试
目的:验证单个模块或功能的正确 性
测试内容:功能测试、性能测试、 兼容性测试、安全性测试
添加标题
添加标题
添加标题
添加标题
测试方法:白盒测试、黑盒测试、 灰盒测试
测 试 工 具 : JU n it 、 Te s t NG 、 Selenium等
集成测试
目的:验证系统各模块间的接口和交互是否正常 测试方法:黑盒测试、白盒测试、灰盒测试 测试内容:功能测试、性能测试、安全测试、兼容性测试 测试工具:JMeter、Selenium、Appium等
系统性能优化
性能测试:使用自 动化工具进行性能 测试,如JMeter、 LoadRunner等
性能瓶颈分析:分 析性能测试结果, 找出性能瓶颈,如 数据库查询、网络 延迟等
性能优化:针对性 能瓶颈进行优化, 如优化数据库查询 、减少网络延迟等
性能监控:建立性 能监控体系,实时 监控系统性能,及 时发现和解决性能 问题
学生成绩管理系统是一个用 于管理学生成绩的软件系统
Байду номын сангаас
系统采用模块化设计,易于 维护和扩展
系统支持多种数据格式,如 Excel、CSV等,方便数据
导入和导出
系统目标
提高学生成绩管理效率 方便教师查询、统计和分析学生成绩 提供个性化学习建议和指导 促进家校沟通,提高家长对学生成绩的了解
学生成绩管理系统c语言代码(供参考)

C程序学生管理系统以下是用C语言编写的学生成绩管理系统的简单代码,可以用vc运行(供参考)#include"stdio.h"#include”stdlib。
h"#include"string。
h”typedefstruct student//定义学生{char name[10];int number;char sex[2];int math;int eglish;int clanguge;int average;}student;typedefstruct unit//定义接点{studentdate;struct unit*next;}unit;unit大build()//建立链表并返回指针{unit*p;if((p=(unit*)malloc(sizeof(unit)))==NULL){printf("二>初始化失败!”);return0;}else{p—>next=NULL;p-〉date.number=O;//头结点存放学生人数printf("初始化成功!\n");return p;}}void add(unit大head)//增加学生{unit*p,*q;int m,n=0;q=head-〉next;p=(unit*)malloc(sizeof(unit));printf(”二〉请输入新生姓名!\n");gets(p—>);fflush(stdin);printf("二〉请输入学号!\n");while(n==0){scanf("%d",&m);fflush(stdin);if(q二二NULL)n二1;while(q){if(q->date.number==m){prinTf("二>你输入的学号与已有同学的学号相同,请重新输入!\n");q=head-〉next;break;}else{q=q->next;if(q==NULL)n=1;}}}p一〉date。
C语言课程设计—学生成绩管理系统

#include ”stdio.h”#include ”string.h”#include "stdlib.h"#include "conio.h"#include ”string.h”#include "fcntl。
h"typedef struct student{int num;char grade[10];char classroom[10];char name[10];float score_math;float score_chinese;float score_english;float average;float sum;}STU;typedef struct Node{STU data;struct Node *next;}*linklist;void menu();char *loginpassword(char password[],int n);//登录验证密码函数声明//linklist createstulist(linklist head);//创建学生链表即学生信息录入函数声明// void printstulist(linklist head);//学生信息输出函数声明//void searchstu_namelist(linklist head);//学生信息查询函数声明(按姓名)// void searchstu_numlist(linklist head);//学生信息查询函数声明(按学号) linklist modifystulist(linklist head);//学生信息修改函数声明//linklist delatestulist(linklist head);//学生信息删除函数声明//void savestulist(linklist head);//学生信息保存到文件函数声明// linklist loadstulist();//从文件中读取学生信息函数声明// void sortstulist(linklist head); //成绩排名函数(按年级)声明//void sort(STU stu[],int flag); //学生分班函数声明//void sortstuclass(linklist head); //成绩排名函数(按班级)声明////*************************************//void main(){char admin[]=”zhangqiong";char password[]=”123456";char person[20];char password1[10];int i;printf(”********************************************************************************\n”);printf("\t\t **********欢迎来到学生成绩管理系统**********\n\n");printf(”********************************************************************************\n\n”);printf(”\t\t\t\t用户登录\n\n\n\n");for(i=0;i<3;i++){printf("用户名:”);gets(person);fflush(stdin);printf(”\n\n\n”);loginpassword(password1,10);printf("\n\n\n”);if(strcmp(admin,person)==0&&strcmp(password,password1)==0){printf(”\t\t\t\t成功登录,亲!\n”);printf("\n\n”);printf(”按任意键继续!”);getch();menu();break;}elseprintf("\t用户名或者密码输入错误\n”);}if(i==3)printf("\t对不起,您今天输入次数太多,已被强制退出!\n”);}//**********************************************************////**********************************************************//char *loginpassword(char password[],int n)//登录密码函数,隐藏密码可见//{int i=0;int m=0;char ch;printf("用户密码:”);while((ch=getch())!='\r’&&m〈n){password[i++]=ch;printf(”*");}password[i]='\0';return password;}//***************************************************// void menu()//主界面函数//{system("cls");linklist L;L=(linklist)malloc(sizeof(Node));L—>next=NULL;int ch;do{printf(”\t -——-----—-******——--——--—---******—————-————-******-—-—-—-—-—\n\n");printf("\t\t\t**********学生成绩管理系统***********\n\n”);printf("\t ——----——--******-—-——------—******—---———--—-******—---———-——\n\n\n\n\n");printf("\t1。
学生成绩管理系统(c语言)

成
绩
管
理
系
统
printf(" ____________________________ \n"); printf(" │ ★主菜单★ │\n"); printf(" │ 0 退出系统 │\n"); printf(" │ 1 成绩录入 │\n"); printf(" │ 2 成绩修改 │\n"); printf(" │ 3 成绩查询 │\n"); printf(" │ 4 成绩汇总 │\n"); printf(" │ 5 成绩输出 │\n"); printf(" │ 6 成绩排名 │\n"); printf(" │ 7 修改密码 │\n"); printf("  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ \n"); printf("请输入您的选择(0,1,2,3,4,5,6,7):"); scanf("%d",&c); switch(c){ case 1:GradeInput(&student); break; case 2:GradeCorrect(student); break; case 3:GradeInquire(student); break; case 4:GradeCollect(student); break; case 5:GradeOutput(student); break; case 6:GradePaixu(student); break; case 7:CodeCorrect(); break; case 0: printf("\n 谢谢使用!\n"); } }while(c!=0); printf("学生成绩管理系统已退出!\n"); } void GradeCode() { FILE *fp; char s[20],yhname[20],mima[20],ch; int i,j=39,flag1=0,flag2=0; do{ system("cls"); printf("\n*************************** 欢 迎 登 陆 学 生 成 绩 管 理 系 统 *****************************\n");
c语言学生成绩信息管理系统源代码

C语言学生成绩信息管理系统源代码一、概述在学校教学管理工作中,学生成绩信息管理是一个至关重要的环节。
为了方便高效地进行学生成绩信息的录入、查询和管理,我们可以利用C语言编写一个学生成绩信息管理系统。
本文将介绍该系统的源代码,并对其进行详细的解释和讲解。
二、系统功能需求1. 录入学生成绩信息2. 查询学生成绩信息3. 修改学生成绩信息4. 删除学生成绩信息5. 显示所有学生成绩信息三、系统源代码实现```c#include <stdio.h>#include <stdlib.h>#include <string.h>// 定义学生结构体typedef struct student {int id; // 学号char name[20]; // 尊称float score; // 成绩} Student;// 全局变量int count = 0; // 记录学生数量Student students[100]; // 学生数组// 录入学生成绩信息void inputStudentInfo() {printf("请输入学生学号:");scanf("d", students[count].id);printf("请输入学生尊称:");scanf("s", students[count].name); printf("请输入学生成绩:");scanf("f", students[count].score); count++;}// 查询学生成绩信息void queryStudentInfo(int id) {for (int i = 0; i < count; i++) {if (students[i].id == id) {printf("学生信息如下:\n");printf("学号:d\n", students[i].id);printf("尊称:s\n", students[i].name);printf("成绩:.2f\n", students[i].score);return;}}printf("未找到该学生信息!\n");}// 修改学生成绩信息void modifyStudentInfo(int id, char *name, float score) { for (int i = 0; i < count; i++) {if (students[i].id == id) {strcpy(students[i].name, name);students[i].score = score;printf("修改成功!\n");return;}}printf("未找到该学生信息!\n");}// 删除学生成绩信息void deleteStudentInfo(int id) {for (int i = 0; i < count; i++) {if (students[i].id == id) {for (int j = i; j < count - 1; j++) { students[j] = students[j + 1]; }count--;printf("删除成功!\n");return;}}printf("未找到该学生信息!\n");}// 显示所有学生成绩信息void displayAllStudentInfo() {if (count == 0) {printf("暂无学生信息!\n");return;}printf("学生成绩信息如下:\n");for (int i = 0; i < count; i++) {printf("学号:d,尊称:s,成绩:.2f\n", students[i].id, students[i].name, students[i].score);}}int m本人n() {int choice, id;char name[20];float score;while (1) {printf("欢迎使用学生成绩信息管理系统!\n");printf("1. 录入学生成绩信息\n");printf("2. 查询学生成绩信息\n");printf("3. 修改学生成绩信息\n");printf("4. 删除学生成绩信息\n");printf("5. 显示所有学生成绩信息\n");printf("6. 退出系统\n");printf("请选择操作:");scanf("d", choice);switch (choice) {case 1: // 录入学生成绩信息inputStudentInfo();break;case 2: // 查询学生成绩信息printf("请输入要查询的学生学号:"); scanf("d", id);queryStudentInfo(id);break;case 3: // 修改学生成绩信息printf("请输入要修改的学生学号:"); scanf("d", id);printf("请输入修改后的尊称:");scanf("s", name);printf("请输入修改后的成绩:");scanf("f", score);modifyStudentInfo(id, name, score); break;case 4: // 删除学生成绩信息printf("请输入要删除的学生学号:"); scanf("d", id);deleteStudentInfo(id);break;case 5: // 显示所有学生成绩信息displayAllStudentInfo();break;case 6: // 退出系统printf("感谢使用学生成绩信息管理系统!\n");exit(0);default:printf("请输入正确的操作!\n");}}return 0;}```四、系统运行效果1. 运行系统后,会出现一个菜单,根据需求选择相应的操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PINGDINGSHAN UNIVERSITY软件学院《专业实训二》项目报告书项目名称:专业班级:学号:姓名:指导教师:2011年6月19日3目录第1章课题背景描述 (3)第2章总体设计 (3)2.1 任务目标 (3)2.2 开发设计思想 (4)2.3 主要功能 (4)2.4 关键技术 (5)第3章代码设计 (7)3.1 截图 (7)3.2 核心代码 (12)第4章总结 (25)参考文献 (26)致谢 (26)第1章课题背景描述由于计算机技术的迅速发展和普及,与之紧密相关的管理信息系统:已经深入到现代社会各行各业中。
在高校,学生信息管理系统(SMIS)作为计算机管理信息系统的一个应用,越来越发挥着它重要的作用。
本文所介绍的学生信息管理系统是用C语言开发的。
本系统完成了对学生的成绩管理,包括对学生信息的添加、修改、排序、删除等计算机管理工作。
本文对采用的相关技术进行了描述,对各个子系统的功能、设计思路及设计方法都作了详细的描述。
学生信息管理系统(SMIS)是大学信息管理系统建设的重要组成部分,是提高教学管理的质量和效益乃至建设知名高水平大学的关键环节。
学生信息处理的电脑化、网络化,也是实现学校管理现代化和信息化的重要内容。
学生信息管理系统的内容对于学校的决策者和管理者来说都至关重要,所以学生信息管理系统应该能够为用户提供充足的信息和快捷的查询手段。
但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点,如: 效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分, 使用计算机对学生信息进行管理,具有手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高学生信息管理的效率,也是进行科学化、正规化管理的重要条件。
第2章总体设计2.1任务目标随着学校的规模不断扩大,学生数量急剧增加,有关学生的各种信息量也成倍增长。
面对庞大的信息量需要有学生管理系统来提高学生管理工作的效率。
通过这样的系统可以做到信息的规范管理、科学统计和快速查询、修改、增加、删除等,从而减少管理方面的工作量。
本系统主要用于学校学生信息管理,总体任务是实现学生信息关系的系统化、规范化和自动化,其主要任务是用计算机对学生各种信息进行日常管理。
32.2 开发设计思想程序总体框架如图:2.3主要功能1、每一条记录包括一个学生的学号、姓名、3门成绩、平均成绩。
2、输入功能:可以一次完成无数条记录的输入。
3、显示功能:完成全部学生记录的显示。
4、查找功能:完成按姓名查找学生记录,并显示。
5、排序功能:按学生平均成绩进行排序。
6、插入功能:按平均成绩高低插入一条学生记录。
7、保存功能:将学生记录保存在任何自定义的文件中,如保存在:c:\score。
8、读取功能:将保存在文件中的学生记录读取出来。
9、有一个清晰美观界面来调用各个功能2.4关键技术12345文件不能打开否是p=head;输出一个出错信当p不为空时息,并返回菜单fwrite(p,LEN,1,fp); (写入一条记录)p=p->next; (指针后移)fclose(fp); (关闭文件)第3章代码设计3.1截图菜单界面:图1.菜单1、创建信息:图2.输入(已输入三个学生的学号及成绩)2、输出界面:图3.输出(按输入顺序输出)3、查找界面:图4.查找(输入名字ZSan)4、删除界面:图5.删除成功(输入学号1001选择Y)5、排序界面:图6-1.排序成功(按总分降序排列)图6-2.菜单2输出查看排序6、插入界面:图7-1.插入成功(插入1个学生学号及成绩)图7-2.菜单2输出数据查看7、保存数据:图8.保存成功(输入文件名称xscjxx)8、读取数据:图9.读取成功(输入文件名称xscjxx)9、退出。
3.2 核心代码/*头文件*/#include <stdio.h>#include<dos.h>#include<stdlib.h> /*其它说明*/#include<string.h> /*字符串函数*/#include<mem.h> /*内存操作函数*/#include<ctype.h> /*字符操作函数*/#include<alloc.h> /*动态地址分配函数*/#define LEN sizeof(STUDENT)typedef struct stu /*定义结构体数组用于缓存数据*/{char num[6];char name[5];int score[3];int sum;float average;int order;struct stu *next;}STUDENT;/*函数原型*/STUDENT *init(); /*初始化函数*/int menu_select(); /*菜单函数*/STUDENT *create(); /*创建链表*/void print(STUDENT *head); /* 显示全部记录*/void search(STUDENT *head); /*查找记录*/STUDENT *delete(STUDENT *head); /*删除记录*/STUDENT *sort(STUDENT *head); /*排序*/STUDENT *insert(STUDENT *head,STUDENT *new); /*插入记录*/ void save(STUDENT *head); /*保存文件*/STUDENT *load(); /*读文件*//*主函数界面*/main(){STUDENT *head,new;head=init(); /*链表初始化,使head的值为NULL*/for(;;) /*循环无限次*/{switch(menu_select()){case 1:head=create();break;case 2:print(head);break;case 3:search(head);break;case 4:head=delete(head);break;case 5:head=sort(head);break;case 6:head=insert(head,&new);break; /*&new表示返回地址*/case 7:save(head);break;case 8:head=load(); break;case 9:exit(0); /*如菜单返回值为9则程序结束*/}}}/*初始化函数*/STUDENT *init(){return NULL; /*返回空指针*/}/*菜单选择函数*/menu_select(){int n;struct date d; /*定义时间结构体*/getdate(&d); /*读取系统日期并把它放到结构体d中*/printf("press any key to enter the menu......"); /*按任一键进入主菜单*/ getch(); /*从键盘读取一个字符,但不显示于屏幕*/clrscr(); /*清屏*/printf("************************************************************************* *******\n");printf("\t\t Welcome to\n");printf("\n\t\t The student score manage system\n");printf("*************************************MENU****************************** *********\n");printf("\t\t\t1. Enter the record\n"); /*输入学生成绩记录*/printf("\t\t\t2. Print the record\n"); /*显示*/printf("\t\t\t3. Search record on name\n"); /*寻找*/printf("\t\t\t4. Delete a record\n"); /*删除*/printf("\t\t\t5. Sort to make new a file\n"); /*排序*/printf("\t\t\t6. Insert record to list\n"); /*插入*/printf("\t\t\t7. Save the file\n"); /*保存*/printf("\t\t\t8. Load the file\n"); /*读取*/printf("\t\t\t9. Quit\n"); /*退出*/printf("\n\t\t Made by Wang Dongsheng.\n");printf("************************************************************************* *******\n");printf("\t\t\t\t%d\\%d\\%d\n",d.da_year,d.da_mon,d.da_day); /*显示当前系统日期*/do{printf("\n\t\t\tEnter your choice(1~9):");scanf("%d",&n);}while(n<1||n>9); /*如果选择项不在1~9之间则重输*/return(n); /*返回选择项,主函数根据该数调用相应的函数*/}/*输入函数*/STUDENT *create(){int i,s;STUDENT *head=NULL,*p; /* 定义函数.此函数带回一个指向链表头的指针*/ clrscr();for(;;){p=(STUDENT *)malloc(LEN); /*开辟一个新的单元*/if(!p) /*如果指针p为空*/{printf("\nOut of memory."); /*输出内存溢出*/return (head); /*返回头指针,下同*/}printf("Enter the num(0:list end):");scanf("%s",p->num);if(p->num[0]=='0') break; /*如果学号首字符为0则结束输入*/printf("Enter the name:");scanf("%s",p->name);printf("Please enter the %d scores\n",3); /*提示开始输入成绩*/s=0; /*计算每个学生的总分,初值为0*/for(i=0;i<3;i++) /*3门课程循环3次*/{do{printf("score%d:",i+1);scanf("%d",&p->score[i]);if(p->score[i]<0 || p->score[i]>100) /*确保成绩在0~100之间*/printf("Data error,please enter again.\n");}while(p->score[i]<0 || p->score[i]>100);s=s+p->score[i]; /*累加各门成绩*/}p->sum=s; /*将总分保存*/p->average=(float)s/3; /*先用强制类型转换将s转换成float型,再求平均值*/ p->order=0; /*未排序前此值为0*/p->next=head; /*将头结点做为新输入结点的后继结点*/head=p; /*新输入结点为新的头结点*/}return(head);}/* 显示全部记录函数*/void print(STUDENT *head){int i=0; /* 统计记录条数*/STUDENT *p; /*移动指针*/clrscr();p=head; /*初值为头指针*/printf("\n************************************STUDENT************************** **********\n");printf("-------------------------------------------------------------------------------\n");printf("| Rec | Num | Name | Sc1 | Sc2 | Sc3 | Sum | Ave | Order |\n");printf("-------------------------------------------------------------------------------\n");while(p!=NULL){i++;printf("| %3d | %4s | %-4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",i, p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);p=p->next;}printf("-------------------------------------------------------------------------------\n");printf("**************************************END******************************* *******\n");}/*查找记录函数*/void search(STUDENT *head){STUDENT *p; /* 移动指针*/char s[5]; /*存放姓名用的字符数组*/clrscr();printf("Please enter name for searching.\n");scanf("%s",s);p=head; /*将头指针赋给p*/while(strcmp(p->name,s) && p != NULL) /*当记录的姓名不是要找的,或指针不为空时*/ p=p->next; /*移动指针,指向下一结点*/if(p!=NULL) /*如果指针不为空*/{printf("\n*************************************FOUND************************** **********\n");printf("-------------------------------------------------------------------------------\n");printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");printf("-------------------------------------------------------------------------------\n");printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);printf("-------------------------------------------------------------------------------\n");printf("***************************************END****************************** ********\n");}elseprintf("\nThere is no num %s student on the list.\n",s); /*显示没有该学生*/}/*删除记录函数*/STUDENT *delete(STUDENT *head){int n;STUDENT *p1,*p2; /*p1为查找到要删除的结点指针,p2为其前驱指针*/char c,s[6]; /*s[6]用来存放学号,c用来输入字母*/clrscr();printf("Please enter the deleted num: ");scanf("%s",s);p1=p2=head; /*给p1和p2赋初值头指针*/while(strcmp(p1->num,s) && p1 != NULL) /*当记录的学号不是要找的,或指针不为空时*/{p2=p1; /*将p1指针值赋给p2作为p1的前驱指针*/p1=p1->next; /*将p1指针指向下一条记录*/}if(strcmp(p1->num,s)==0) /*学号找到了*/{printf("**************************************FOUND*************************** *********\n");printf("-------------------------------------------------------------------------------\n");printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");printf("-------------------------------------------------------------------------------\n");printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->sum,p1->average,p1->order);printf("-------------------------------------------------------------------------------\n");printf("***************************************END****************************** ********\n");printf("Are you sure to delete the student Y/N ?"); /*提示是否要删除,输入Y删除,N则退出*/for(;;){scanf("%c",&c);if(c=='n'||c=='N') break; /*如果不删除,则跳出本循环*/if(c=='y'||c=='Y'){if(p1==head) /*若p1==head,说明被删结点是首结点*/head=p1->next; /*把第二个结点地址赋予head*/elsep2->next=p1->next; /*否则将一下结点地址赋给前一结点地址*/n=n-1;printf("\nNum %s student have been deleted.\n",s);printf("Don't forget to save.\n");break; /*删除后就跳出循环*/}}}elseprintf("\nThere is no num %s student on the list.\n",s); /*找不到该结点*/return(head);}/*排序函数*/STUDENT *sort(STUDENT *head){int i=0; /*保存名次*/STUDENT *p1,*p2,*t,*temp; /*定义临时指针*/temp=head->next; /*将原表的头指针所指的下一个结点作头指针*/ head->next=NULL; /*第一个结点为新表的头结点*/while(temp!=NULL) /*当原表不为空时,进行排序*/{t=temp; /*取原表的头结点*/temp=temp->next; /*原表头结点指针后移*/p1=head; /*设定移动指针p1,从头指针开始*/p2=head; /*设定移动指针p2做为p1的前驱,初值为头指针*/while(t->average<p1->average&&p1!=NULL) /*作成绩平均分比较*/{p2=p1; /*待排序点值小,则新表指针后移*/p1=p1->next;}if(p1==p2) /*p1==p2,说明待排序点值大,应排在首位*/{t->next=p1; /*待排序点的后继为p*/head=t; /*新头结点为待排序点*/}else /*待排序点应插入在中间某个位置p2和p1之间,如p为空则是尾部*/ {t->next=p1; /*t的后继是p1*/p2->next=t; /*p2的后继是t*/}}p1=head; /*已排好序的头指针赋给p1,准备填写名次*/while(p1!=NULL) /*当p1不为空时,进行下列操作*/{i++; /*结点序号*/p1->order=i; /*将结点序号赋值给名次*/p1=p1->next; /*指针后移*/}printf("Sorting is sucessful.\n"); /*排序成功*/return (head);}/*插入记录函数*/STUDENT *insert(STUDENT *head,STUDENT *new){STUDENT *p0,*p1,*p2;int n,sum1,i;p1=head; /*使p1指向第一个结点*/p0=new; /*p0指向要插入的结点*/printf("\nPlease enter a new record.\n"); /*提示输入记录信息*/ printf("Enter the num:");scanf("%s",new->num);printf("Enter the name:");scanf("%s",new->name);printf("Please enter the %d scores.\n",3);sum1=0; /*保存新记录的总分,初值为0*/for(i=0;i<3;i++){do{printf("score%d:",i+1);scanf("%d",&new->score[i]);if(new->score[i]>100||new->score[i]<0)printf("Data error,please enter again.\n");}while(new->score[i]>100||new->score[i]<0);sum1=sum1+new->score[i]; /*累加各门成绩*/}new->sum=sum1; /*将总分存入新记录中*/new->average=(float)sum1/3;new->order=0;if(head==NULL) /*原来的链表是空表*/{head=p0;p0->next=NULL;} /*使p0指向的结点作为头结点*/ else{while((p0->average<p1->average)&&(p1->next!=NULL)) {p2=p1; /*使p2指向刚才p1指向的结点*/p1=p1->next; /*p1后移一个结点*/}if(p0->average>=p1->average){if(head==p1)head=p0; /*插到原来第一个结点之前*/else p2->next=p0; /*插到p2指向的结点之后*/p0->next=p1;}else{p1->next=p0;p0->next=NULL;} /*插到最后的结点之后*/}n=n+1; /*结点数加1*/head=sort(head); /*调用排序的函数,将学生成绩重新排序*/printf("\nStudent %s have been inserted.\n",new->name);printf("Don't forget to save the new file.\n");return(head);}/*保存数据到文件函数*/void save(STUDENT *head){FILE *fp; /*定义指向文件的指针*/STUDENT *p; /* 定义移动指针*/char outfile[10];printf("Enter outfile name,for example c:\\score\n");scanf("%s",outfile);if((fp=fopen(outfile,"wb"))==NULL) /*为输出打开一个二进制文件,为只写方式*/ {printf("Cannot open the file\n");return; /*若打不开则返回菜单*/}printf("\nSaving the file......\n");p=head; /*移动指针从头指针开始*/while(p!=NULL) /*如p不为空*/{fwrite(p,LEN,1,fp); /*写入一条记录*/p=p->next; /*指针后移*/}fclose(fp); /*关闭文件*/printf("Save the file successfully!\n");}/* 从文件读数据函数*/STUDENT *load(){STUDENT *p1,*p2,*head=NULL; /*定义记录指针变量*/FILE *fp; /* 定义指向文件的指针*/char infile[10];printf("Enter infile name,for example c:\\score\n");scanf("%s",infile);if((fp=fopen(infile,"rb"))==NULL) /*打开一个二进制文件,为只读方式*/ {printf("Can not open the file.\n");return(head);}printf("\nLoading the file!\n");p1=(STUDENT *)malloc(LEN); /*开辟一个新单元*/if(!p1){printf("Out of memory!\n");return(head);}head=p1; /*申请到空间,将其作为头指针*/while(!feof(fp)) /*循环读数据直到文件尾结束*/{if(fread(p1,LEN,1,fp)!=1) break; /*如果没读到数据,跳出循环*/p1->next=(STUDENT *)malloc(LEN); /*为下一个结点开辟空间*/if(!p1->next){ printf("Out of memory!\n");return (head);}p2=p1; /*使p2指向刚才p1指向的结点*/p1=p1->next; /*指针后移,新读入数据链到当前表尾*/}p2->next=NULL; /*最后一个结点的后继指针为空*/fclose(fp);printf("You have success to read data from the file!\n");return (head);}第4章总结经过一个多星期的C语言课程设计,感觉自己收获不少!首先,链表老师讲的很少,但这个课程设计里面主要都是用链表,因为要达到这样的功能,使用链表相当方便,但不容易理解,所以在这方面我很了很多的时间看课本和参考课外书,使C语言的知识强化了不少。