📄 zuoye.c
字号:
/*用C语言或其他高级语言编程(最好C语言),基本功能:
包括报名管理、成绩管理、证书管理等。能做到考试的报名
成绩的录入与查询以及证书的发放等功能。
实现有关功能的增加、修改、删除、查询和统计模块*/
/*根据要求知道,一个学生报名后就拥有唯一的考号,考号随着
考生取消报名而消失,所以可以以考号为Key来实现查找学生记录,
实现有关功能的增加、修改、删除、查询.
实验环境VC6.0++
******************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
int number=3001; //考号的初值
int zhengshu=100440; //证书号的初值
typedef struct LNode{
char name[20];
char ID[20];//身份证号或其他有效证件号
float score;//考试成绩;
int kaohao;//考试编号
int NO;//证书编号
struct LNode *next;
}LNode;
void menu_f() //显示功能菜单
{
printf("\n***********************");
printf("\n1.报名管理");
printf("\n2.成绩管理.");
printf("\n3.证书管理.");
printf("\n0.退出.");
printf("\n 请选择操作:");
}
void menu_f1()//报名管理的子菜单
{
printf("\n 1.增加新考生.");
printf("\n 2.删除某考生.");
printf("\n 3.查询某考生.");
printf("\n 0.返回主菜单.");
printf("\n 请选择操作:");
}
void menu_f2() //成绩管理的子菜单
{
printf("\n 1.录入考生成绩.");
printf("\n 2.更新某考生成绩.");
printf("\n 3.查询某考生成绩.");
printf("\n 0.返回主菜单.");
printf("\n 请选择操作:");
}
void menu_f3()//证书管理的子菜单
{
printf("\n 1.查询某考生证书状态.");
printf("\n 2.统计考试情况.");
printf("\n 0.返回主菜单.");
printf("\n 请选择操作:");
}
LNode* insert(LNode *HL) //增加新考生模块
{
char n[20],id[20],ch;
LNode *s,*p;
do{
printf("\n输入新考生的记录(姓名,有效证件号):");
scanf("%s%s",n,id);
s=(LNode*)malloc(sizeof(LNode));
strcpy(s->name,n);strcpy(s->ID,id);s->kaohao=number++;
s->NO=0;s->score=0.0;
s->next=HL;
HL=s;
printf("continue?y/n:");
while(isspace(ch=getchar()));
}while(ch=='y'||ch=='Y');
printf("\n加入新考生后考试安排考号情况如下:\n");
printf("姓名 证件号 考号\n");
for(p=HL;p!=NULL;p=p->next) printf("%-20s%-20s%d\n",p->name,p->ID,p->kaohao);return HL;
}
LNode* deleteLNode(LNode *HL)//取消某考生报名模块
{
int n;
LNode *cp,*ap;
if(HL==NULL)printf("\n error!考生为空!\n");
else {
printf("\n请输入要注销的考生考号:");
scanf("%d",&n);
cp=HL,ap=NULL;
while(cp!=NULL)if(cp->kaohao==n)break;
else {ap=cp;cp=cp->next;}
if(cp==NULL)printf("\n此考号不存在!\n");
else{
if(ap==NULL)HL=HL->next;
else ap->next=cp->next;
printf("考号:%d 考生:%s 取消报名成功!\n",n,cp->name);
free(cp);
}
}return HL;
}
void Found(LNode *HL) //查询某考生的信息(名字和有效证件号)
{
int n;
LNode *p=HL;
printf("\n请输入要查询考生的考号:\n");
scanf("%d",&n);
while(p!=NULL)if(p->kaohao==n)break;
else p=p->next;
if(p!=NULL){printf("此考号考生信息为:\n");
printf("姓名:%s 证件号:%s\n",p->name,p->ID);
}
else printf("无此考号,请重新查询!\n");
}
LNode * baoming(LNode *H)//报名管理模块
{
int choice;
while(1)
{
menu_f1();
scanf("%d",&choice);
if(choice==0) break;
else if(choice<0||choice>3){printf("error input!\n ");continue;}
switch(choice)
{
case 1: H=insert(H);
break;
case 2: H=deleteLNode(H);
break;
case 3: Found(H);
break;
}
}
return H;
}
void insertSorce(LNode *HL)//录入成绩模块
{ LNode *p;
int n;
char ch;
float ct;
do{
p=HL;
printf("\n输入考生的考号和成绩:");
scanf("%d%f",&n,&ct);
while(p!=NULL)if(p->kaohao==n)break;
else p=p->next;
if(p!=NULL){
p->score=ct;printf("\n录入成功!\n");
if(ct>=60)p->NO=zhengshu++; //及格的发放证书
}else printf("\n录入失败,无此考号!\n");
printf("continue?y/n:");
while(isspace(ch=getchar()));
}while(ch=='y'||ch=='Y');
printf("\n所有考生成绩如下:\n");
printf("姓名 考号 成绩\n");
for(p=HL;p!=NULL;p=p->next)printf("%-20s %-15d%-5.2f\n",p->name,p->kaohao,p->score);
}
void modify1(LNode *HL)//修改成绩模块
{
int n;float ct;
LNode *p=HL;
printf("\n输入要更新的考号和新成绩:");
scanf("%d%f",&n,&ct);
while(p!=NULL)if(p->kaohao==n)break;
else p=p->next;
if(p!=NULL){
p->score=ct;printf("\n更新成功!\n");
if(ct>=60)p->NO=zhengshu++; //及格的发放证书
}else printf("\n更新失败,无此考号!\n");
printf("\n更新后所有考生成绩如下:\n");
printf("姓名 考号 成绩\n");
for(p=HL;p!=NULL;p=p->next)printf("%-20s %-15d%-5.2f\n",p->name,p->kaohao,p->score);
}
void FoundSorce(LNode *HL) //查询成绩模块
{
int n;
LNode *p=HL;
printf("\n输入要查询的考号:");
scanf("%d",&n);
while(p!=NULL)if(p->kaohao==n)break;
else p=p->next;
if(p!=NULL){
printf("\n此考生的成绩是:%-5.2f\n",p->score);
}else printf("\n查询失败,无此考号!\n");
}
void scores(LNode *HL) //成绩管理模块
{
int choice;
while(1)
{
menu_f2();
scanf("%d",&choice);
if(choice==0) break;
else if(choice<0||choice>3){printf("error input!\n ");continue;}
switch(choice)
{
case 1: insertSorce(HL);
break;
case 2: modify1(HL);
break;
case 3: FoundSorce(HL);
break;
}
}
}
void FoundStation(LNode *HL)//查询某考生是否获得此科目考试证书
{
int n;
LNode *p=HL;
printf("\n输入要查询的考号:");
scanf("%d",&n);
while(p!=NULL)if(p->kaohao==n)break;
else p=p->next;
if(p!=NULL){
if(p->NO!=0)printf("\n此考生的证书编号是:%d\n",p->NO);
else printf("此考生没有通过,无证书!\n");
}
else printf("\n查询失败,无此考号!\n");
}
void Station(LNode *HL)//统计此科目考试情况
{
int s=0,n=0;
LNode *p=HL;
while(p!=NULL){
s++; //统计考生人数
if(p->score>=60)n++;
p=p->next;
}
printf("参加此科目考试人数为:%d,通过考试获得证书人数为:%d\n",s,n);
printf("获得证书的考生如下:\n");
printf("姓名 证件号 成绩 证书号\n");
for(p=HL;p!=NULL;p=p->next)if(p->score>=60)
printf("%-20s %-20s%-5.2f %d\n",p->name,p->ID,p->score,p->NO);
printf("没有通过的考生如下:\n");
printf("姓名 证件号 成绩 \n");
for(p=HL;p!=NULL;p=p->next)if(p->score<60)
printf("%-20s %-20s%-5.2f \n",p->name,p->ID,p->score);
}
void certificate(LNode *HL) //证书管理模块
{
int choice;
while(1)
{
menu_f3();
scanf("%d",&choice);
if(choice==0) break;
else if(choice<0||choice>3){printf("error input!\n ");continue;}
switch(choice)
{
case 1: FoundStation(HL);
break;
case 2:Station(HL);
break;
}
}
}
void main() //主函数
{
int choice;
int i=1;
char n[20],id[20],ch;
LNode *head=NULL,*s,*p;
printf("****欢迎使用某科目等级证书考试管理系统****\n");
printf("第一次使用,请先建立考生报名数据库:\n");
do{
printf("依次输入第 %d 考生的记录(姓名,有效证件号):",i);
scanf("%s%s",n,id);
s=(LNode*)malloc(sizeof(LNode));
strcpy(s->name,n);strcpy(s->ID,id);s->kaohao=number++;
s->NO=0;s->score=0.0;
s->next=head;
head=s;
i++;
printf("continue?y/n:");
while(isspace(ch=getchar()));
}while(ch=='y'||ch=='Y');
printf("你所输入考生及安排考号情况如下:\n");
printf("姓名 证件号 考号\n");
for(p=head;p!=NULL;p=p->next) printf("%-20s%-20s%d\n",p->name,p->ID,p->kaohao);
while(1)
{
menu_f();
scanf("%d",&choice);
if(choice==0) break;
else if(choice<0||choice>3){printf("error input!\n ");continue;}
switch(choice)
{
case 1: head=baoming(head);
break;
case 2: scores(head);
break;
case 3: certificate(head);
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -