问题描述:该系统要求建立一个简单的学生出勤管理系统,并具有排序、查找、计算、插入、计算、显示等功能。通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些算法思想的应用。
功能要求:(文件操作,文件中至少包含了15条以后的信息)
(1)学生出勤信息包括:出勤信息记录了学生的缺课情况,它包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假及旷课)等。
(2)需要实现的功能
1)使用文件保存学生出勤信息,程序运行时从文件读入数据,程序结束前将数据保存在文件中;
2) 新增学生的缺课记录;
3) 改某个学生的缺课记录;
4) 查询某个学生的缺课情况;
5) 统计某段时间内,旷课学生姓名及旷课次数,按旷课次数由多到少排序;
6) 学生可自动增加新功能模块(视情况可另外加分)。
(3)界面友好,输入信息符合逻辑如输入月份不能输入13月等。
大神求指教!
急!!!!!!!!!!!!!!
C语言学生出勤管理系统
答案:2 悬赏:10 手机版
解决时间 2021-02-06 10:20
- 提问者网友:情歌越听越心酸
- 2021-02-05 18:34
最佳答案
- 五星知识达人网友:愁杀梦里人
- 2021-02-05 19:39
你好懒惰哦!!自己不做,到网上来找人做!!
全部回答
- 1楼网友:duile
- 2021-02-05 20:41
c 语言学生成绩管理系统
#include
#include
#include
#include
typedef struct student
{
char studentnumber[20];
char studentname[20];
char classname[20];
float mark1;
float mark2;
float mark3;
struct student *next;
}student;
student *headlink;
void readinfoformfile();
void menu();
void createheadlink();
student *mallocnode();
void getinformation(student *t);
void outputinformation();
void desplayinfobystudentname();
void desplayinfobystudentnumber();
void desplayonenode(student *t);
void insertonenode(student *t);
void deletenodebystudentnumber();
void changemarkbyname();
void changemarkbynumber();
void savelinktofile();
void paixu();
void desplaymarksegment();
int choose;
main()
{
system("color 2a");
printf("\n\t\t欢迎进入***学院***班学生成绩管理系统\n\n\n");
printf("\t\t\t\to(∩_∩)o\n\n\n\n");
printf("\t\t\t^_^\t\t\t^_^\n\n");
printf("\n\t\t 注意:请按照要求输入相应信息,谢谢!\n\n\n\n\n");
printf("\t\t\t\t\t\t\t\t制作人:***\n\n\n");
printf("\t\t\t 按任意键进入…………");
getch();
system("cls");
createheadlink();
readinfoformfile();
menu();
}
void readinfoformfile(void)
{
file *fp;
student *p;
fp=fopen("student.txt","r");
if(!fp)
{
printf("\n");
return;
}
p=mallocnode();
while(fscanf(fp,"%s%s%s%f%f%f",p->studentnumber,p->studentname,p->classname,&(p->mark1),&(p->mark2),&(p->mark3))>0)
{
insertonenode(p);
p=mallocnode();
}
fclose(fp);
}
void menu(void)
{
student *p;
printf("\t\t (^o^)欢迎使用学生成绩管理系统(^o^)\n\n");
printf("\t ※--------------------请选择相应功能---------------------※\n\n");
printf("\t 1: 显示所有学生的信息 |");
printf(" \t 2: 按姓名查询 |\n\n");
printf("\t 3: 按学号查询 |");
printf(" \t\t 4: 增加学生 |\n\n");
printf("\t 5: 删除学生 |");
printf(" \t\t 6: 按姓名修改学生成绩 |\n\n");
printf("\t 7: 按学号修改学生成绩 |");
printf(" \t 8: 保存所有学生信息 |\n\n");
printf("\t 9: 按成绩输出学生信息 |");
printf("\t 10: 显示不及格及优秀学生 |\n\n");
printf("\t 11: 返回主菜单 |");
printf("\t\t 12: 退出 |\n\n");
printf("\t ※----------------------o(∩_∩)o------------------------※\n\n");
printf("\t 请输入对应数字:");
scanf("%d",&choose);
switch(choose)
{
case 1:system("cls");
outputinformation();
break;
case 2: system("cls");
desplayinfobystudentname();
break;
case 3: system("cls");
desplayinfobystudentnumber();
break;
case 4: system("cls");
p=mallocnode();
getinformation(p);
insertonenode(p);
break;
case 5: system("cls");
deletenodebystudentnumber();
break;
case 6: system("cls");
changemarkbyname();
break;
case 7: system("cls");
changemarkbynumber();
break;
case 8: system("cls");
savelinktofile();
break;
case 9: system("cls");
paixu();break;
case 10: system("cls");
desplaymarksegment();break;
case 11: system("cls");
break;
case 12: system("cls");
savelinktofile();
free(headlink);
exit(1);
break;
default: system("cls"); break;
}
menu();
}
void createheadlink(void)
{
student *p;
p=(student*)malloc(sizeof(student));
headlink=p;
p->next=null;
}
student *mallocnode(void)
{
student *p;
int i;
p=(student*)malloc(sizeof(student));
if(p==null)
return null;
for(i=0;i<10;i++)
p->studentnumber='\0';
for(i=0;i<20;i++)
p->studentname='\0';
for(i=0;i<20;i++)
p->classname='\0';
p->mark1=0.0;
p->mark2=0.0;
p->mark3=0.0;
p->next=null;
return p;
}
void getinformation(student *t)
{
printf("请输入学生学号:");
scanf("%s",t->studentnumber);
printf("请输入学生姓名:");
scanf("%s",t->studentname);
printf("请输入该生所在班级:");
scanf("%s",t->classname);
printf("请输入第1门成绩:");
scanf("%f",&(t->mark1));
printf("请输入第2门成绩:");
scanf("%f",&(t->mark2));
printf("请输入第3门成绩:");
scanf("%f",&(t->mark3));
}
void insertonenode(student *t)
{
student *p;
p=headlink;
while(p->next)
{
p=p->next;
}
p->next=t;
}
void desplayinfobystudentname(void)
{
student *p;
char studentname[20];
char flag=0;
p=headlink->next;
printf("请输入学生姓名:");
scanf("%s",studentname);
while(p)
{
if(strcmp(p->studentname,studentname)==0)
{system("cls");
printf("\t学号\t姓名\t班级\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n");
desplayonenode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag) {system("cls");
printf("\t 对不起,不存在姓名为 %s 的学生\n",studentname);}
}
void desplayinfobystudentnumber(void)
{
student *p;
char studentnumber[20];
char flag=0;
p=headlink->next;
printf("请输入学生学号:");
scanf("%s",studentnumber);
while(p)
{
if(strcmp(p->studentnumber,studentnumber)==0)
{ system("cls");
printf("\t学号\t姓名\t班级\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n");
desplayonenode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag) {system("cls");
printf("\t 对不起,不存在学号为 %s 的学生\n",studentnumber);
}}
void desplayonenode(student *t)
{
printf("\t%s\t",t->studentnumber);
printf("%s\t",t->studentname);
printf("%s\t",t->classname);
printf("%.2f\t",t->mark1);
printf("%.2f\t",t->mark2);
printf("%.2f\t",t->mark3);
printf("%.2f\t",t->mark1+t->mark2+t->mark3);
printf("%.2f\t\n",(t->mark1+t->mark2+t->mark3)/3);
}
void deletenodebystudentnumber(void)
{
char studentnumber[10];
student *p,*q;
char flag=0;
printf("请输入要删除的学生学号:");
scanf("%s",studentnumber);
p=headlink;
q=headlink->next;
while(q)
{
if(strcmp(q->studentnumber,studentnumber)==0)
{
p->next=q->next;
free(q);
flag=1;
break;
}
p=p->next;
q=q->next;
}
if(!flag)
{ system("cls");
printf("\t 不存在该学号的学生\n");
return;
}
system("cls");
printf("\t 成功删除\n");
}
void outputinformation(void)
{
student *p;
p=headlink->next;
if(p==null)
{
printf("\t 现在没有学生信息,请先输入学生信息\n\n");
return;
}
printf("\t学号\t姓名\t班级\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n");
while(p)
{
desplayonenode(p);
p=p->next;
}
}
void changemarkbyname(void)
{
student *p;
char studentname[20];
char flag=0;
float mark1,mark2,mark3;
p=headlink->next;
printf("请输入学生姓名:");
scanf("%s",studentname);
while(p)
{
if(strcmp(p->studentname,studentname)==0)
{
printf("请输入新的第1门成绩:\n");
scanf("%f",&mark1);
printf("请输入新的第2门成绩:\n");
scanf("%f",&mark2);
printf("请输入新的第3门成绩:\n");
scanf("%f",&mark3);
p->mark1=mark1;
p->mark2=mark2;
p->mark3=mark3;
flag=1;
printf("修改成功\n");
break;
}
p=p->next;
}
if(!flag) {system("cls");
printf("\t 对不起,不存在姓名为 %s 的学生\n",studentname);
} }
void changemarkbynumber(void)
{
student *p;
char studentnumber[20];
char flag=0;
float mark1,mark2,mark3;
p=headlink->next;
printf("请输入学生学号:");
scanf("%s",studentnumber);
while(p)
{
if(strcmp(p->studentnumber,studentnumber)==0)
{
printf("请输入新的第1门成绩:\n");
scanf("%f",&mark1);
printf("请输入新的第2门成绩:\n");
scanf("%f",&mark2);
printf("请输入新的第3门成绩:\n");
scanf("%f",&mark3);
p->mark1=mark1;
p->mark2=mark2;
p->mark3=mark3;
flag=1;
printf("修改成功\n");
break;
}
p=p->next;
}
if(!flag){system("cls");
printf("\t 对不起,不存在学号为 %s 的学生\n",studentnumber);
}}
void savelinktofile(void)
{
student *p;
file *fp;
p=headlink->next;
if(p==null)
{
printf("\t 现在没有学生信息,请先输入学生信息\n\n");
return;
}
fp=fopen("student.txt","w+");
if(!fp)
{
printf("文件不存在\n");
return;
}
while(p)
{
fprintf(fp,"%s %s %s %f %f %f\n",p->studentnumber,p->studentname,p->classname,p->mark1,p->mark2,p->mark3);
p=p->next;
}
fclose(fp);
}
void desplaymarksegment(void)
{
student *p;
int count=0;
p=headlink->next;
printf("\t60分以下(不及格)的学生成绩如下:\n");
printf("\t学号\t姓名\t班级\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n\n");
while(p)
{
if((6>((int)(p->mark1/10)))||(6>((int)(p->mark2/10)))||(6>((int)(p->mark3/10))))
{
count++;
desplayonenode(p);
}
p=p->next;
}
printf("\t不及格的学生一共有%d人\n",count);
p=headlink->next;
printf("\t成绩优秀的学生成绩如下:\n");
printf("\t学号\t姓名\t班级\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n\n");
count=0;
while(p)
{
if((8<=((int)(p->mark1/10)))&&(8<=((int)(p->mark2/10)))&&(8<=((int)(p->mark3/10))))
{
count++;
desplayonenode(p);
}
p=p->next;
}
printf("\t成绩优秀的学生一共有%d人\n",count);
}
void paixu(void)
{
student exchange,*r,*p,*q;
r=headlink->next;
if(r==null)
{
printf("\t 现在还没学生信息,请先输入学生信息\n");
return;
}
while(r)
{
p=r;
q=r->next;
while(q)
{
if((q->mark1+q->mark2+q->mark3)>(p->mark1+p->mark2+p->mark3))
{
strcpy(exchange.studentnumber,q->studentnumber);
strcpy(exchange.studentname,q->studentname);
strcpy(exchange.classname,q->classname);
exchange.mark1=q->mark1;
exchange.mark2=q->mark2;
exchange.mark3=q->mark3;
strcpy(q->studentnumber,p->studentnumber);
strcpy(q->studentname,p->studentname);
strcpy(q->classname,p->classname);
q->mark1=p->mark1;
q->mark2=p->mark3;
q->mark3=p->mark3;
strcpy(p->studentnumber,exchange.studentnumber);
strcpy(p->studentname,exchange.studentname);
strcpy(p->classname,exchange.classname);
p->mark1=exchange.mark1;
p->mark2=exchange.mark2;
p->mark3=exchange.mark3;
}
q=q->next;
}
r=r->next;
}
outputinformation();
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯