C语言学籍管理系统
来源:互联网 发布:yum 缓存目录 编辑:程序博客网 时间:2024/04/27 17:16
#include <stdio.h>
#include <stdlib.h>//内存分配
#include <string.h>//字符串处理
#include <conio.h>//用于getch()
typedef struct mark
{
char num[20];//学号
int ch;//语
int ma;//数
int en;//外
struct mark *next ;
} m;
typedef struct student
{
char num[20];//学号
char name[30];//姓名
int grade;//年级
int cla;//班
int jy;//检验是否建档
struct student *next ;
} s;
s * shead=NULL;
s * si=NULL;
m * mhead=NULL;
m * mi=NULL;
void initials()
{
FILE *fp;
fp=fopen("student.txt","r");
if(fp==NULL){ printf("/n/n学生文件不存在!/n/n"); return; }
fseek(fp,0,SEEK_END);
int i,n;
n=ftell(fp)/sizeof(s);
fseek(fp,0,0);//或者rewind(fp);
for(i=0;i<n;i++)
{
s *p;
p=(s*)malloc(sizeof(s));
p->next=NULL;
fread(p,sizeof(s),1,fp);
if(shead==NULL)shead=si=p;
else {si->next=p,si=p;}
}
//printf("/n初始化%d个学生成功!/n",n);
}
void initialm()
{
FILE *fp;
fp=fopen("mark.txt","r");
if(fp==NULL){ printf("/n/n档案文件不存在!/n/n"); return; }
fseek(fp,0,SEEK_END);
int i,n;
n=ftell(fp)/sizeof(m);
fseek(fp,0,0);//或者rewind(fp);
for(i=0;i<n;i++)
{
m *p;
p=(m*)malloc(sizeof(m));
p->next=NULL;
fread(p,sizeof(m),1,fp);
if(mhead==NULL)mhead=mi=p;
else {mi->next=p,mi=p;}
}
//printf("/n初始化%d个档案成功!/n",n);
}
void news()
{
printf("/n/n/n/n█创建学生█/n/n");
s *p;
p=(s *)malloc(sizeof(s));
p->next=NULL;
p->jy=0;//未建档
loop:
printf("/n请输入新学号/n/n");
scanf("%s",p->num);
//检验
s* pj=shead;
int y=1;
while(pj)
{
if(strcmp(pj->num,p->num)==0){y=0;printf("/n/n错误,该学号已存在,请重新输入!");goto loop;}
pj=pj->next;
}//检验
printf("/n请输入新学生姓名/n/n");
scanf("%s",p->name);
printf("/n请输入新学生年级/n/n");
scanf("%d",&p->grade);
printf("/n请输入新学生班级/n/n");
scanf("%d",&p->cla);
if(shead==NULL)shead=si=p;
else { si->next=p;si=p; }
printf("/n新学生创建成功,请创建档案!/n/n");
}
void newm()
{
printf("/n/n/n/n█创建档案█/n/n");
m *p;
p=(m *)malloc(sizeof(m));
p->next=NULL;
loop:
printf("/n请输入学生学号/n/n");
scanf("%s",p->num);
//检验
s* pj=shead;
int y=1;
while(pj)
{
if(strcmp(pj->num,p->num)==0){y=0;break;}
pj=pj->next;
}//检验
if(y){
printf("/n/n错误,该学号不存在!");
char c;
printf("/n/n您想---重新输入(A)--退出输入(E)/n");
c=getch();
if(c=='A'||c=='a')goto loop;else return;
}
if(pj->jy)
{printf("/n/n错误,该学生已经建档!");
char c;
printf("/n/n您想---重新输入(A)--退出输入(E)---/n");
c=getch();
if(c=='A'||c=='a')goto loop;else return;
}
printf("/n请输入学生语文成绩/n/n");
scanf("%d",&p->ch);
printf("/n请输入数学成绩/n/n");
scanf("%d",&p->ma);
printf("/n请输入英语成绩/n/n");
scanf("%d",&p->en);
if(mhead==NULL)mhead=mi=p;
else { mi->next=p;mi=p; }
pj->jy=1;//建档
printf("/n学生档案创建成功/n/n");
}
void show()
{
s *p;
p=shead;
printf("/n/n/n █学生信息数据库█ ");
printf("/n|--------------------------------------------------------------------------|");
int i=0;
while(p)
{
i++;
printf("/n|[%d]/t学号%s /t姓名%s /t年级%d /t班级%d",i,p->num ,p->name ,p->grade ,p->cla);
if(p->jy){ m*p1=mhead;
while(p1)
{if(strcmp(p1->num,p->num)==0)printf("/n/t成绩:语 %d /t数 %d /t英 %d",p1->ch,p1->ma ,p1->en); p1=p1->next; }
}
else printf("/t [无档案]");
printf("/n|--------------------------------------------------------------------------|");
p=p->next;
}
printf("/n█学生总数: %d ",i);
printf("/n|--------------------------------------------------------------------------|/n/n/n/n/n/n");
}
void saves()
{
FILE *fp;
fp=fopen("student.txt","w");
s *p;
p=shead;
int i=0;
while(p)
{
i++;
fwrite(p,sizeof(s),1,fp);
p=p->next;
}
//printf("/n/n保存%d个学生成功!",i);
}
void savem()
{
FILE *fp;
fp=fopen("mark.txt","w");
m *p;
p=mhead;
int i=0;
while(p)
{
i++;
fwrite(p,sizeof(m),1,fp);
p=p->next;
}
//printf("/n/n保存%d个档案成功!",i);
}
void show_rank()
{
m *p=mhead;
if(p==NULL){ printf("/n/n档案文件不存在!/n/n"); return; }
int n=0;
while(p)
{n++;p=p->next;}
int i,j;
m * pp=(m*)calloc(n,sizeof(m));
//赋值
p=mhead;
for(i=0;i<n;i++)
{
pp[i]=*p;
p=p->next;
}
//赋值
//排序
for(i=1;i<n;i++)
for(j=0;j<n-i;j++)
{
m t;
if((pp[j].ch+pp[j].ma+pp[j].en)<=(pp[j+1].ch+pp[j+1].ma+pp[j+1].en))
{
t=pp[j]; pp[j]=pp[j+1]; pp[j+1]=t;
}
}
//排序
printf("/n/n/n █学生成绩排名█ ");
printf("/n|--------------------------------------------------------------------------|");
for(i=0;i<n;i++)
{
printf("/n █第%d名 ",i+1);
s * p=shead;
while(p)
{ if(strcmp(p->num,pp[i].num)==0) printf("姓名%s /t学号%s /t年级%d /t班级%d",p->name ,p->num ,p->grade ,p->cla);
p=p->next;
}
printf("/n 总分%d 均分% .2f 成绩:语 %d /t数 %d /t英 %d",pp[i].ch+pp[i].ma+pp[i].en,float(pp[i].ch+pp[i].ma+pp[i].en)/3,pp[i].ch,pp[i].ma,pp[i].en);
printf("/n|--------------------------------------------------------------------------|");
}
}
void dels()
{
printf("/n/n/n █删除学生█ ");
loop:
printf("/n/n/n请输入要删除的学生学号:");
char n[20];
scanf("%s",n);
s *p=shead,*p1=shead;
int y=0;
int jy=1;
while(p)
{ //while 1
y++;
if(strcmp(n,p->num)==0)
{ //if 1
//删除档案
m *p2,*p3;
p2=p3=mhead;
int y1=0;
while(p2)
{ y1++; if(strcmp(p2->num,p->num)==0){ if(p2==mhead)mhead=mhead->next; else p3->next=p2->next; }
p2=p2->next;
if(y1>1)p3=p3->next;
}
//删除档案
if(p==shead)shead=shead->next;
else p1->next=p->next;
jy=0;
}//if 1
p=p->next;
if(y>1)p1=p1->next;
}//while 1
if(jy)printf("/n/n错误,要删除的学号不存在!/n/n");
else printf("/n/n删除成功!/n/n");
char c;
printf("/n/n您想---继续删除(A)--退出删除(E)---/n");
c=getch();
if(c=='A'||c=='a')goto loop;else return;
}
void delm()
{
printf("/n/n/n █删除档案█ ");
loop:
printf("/n/n/n请输入要删除档案的学号:");
char n[20];
scanf("%s",n);
m *p=mhead,*p1=mhead;
int y=0;
int jy=1;
while(p)
{
y++;
if(strcmp(n,p->num)==0)
{
//*让jy为1
s *p2=shead;
while(p2)
{
if(strcmp(p2->num,p->num)==0){ p2->jy=0; printf("该学生的姓名为%s",p2->name);}
p2=p2->next;
}
jy=0;
if(p==mhead)mhead=mhead->next; else p1->next=p->next;
}
p=p->next;
if(y>1)p1=p1->next;
}
if(jy)printf("/n/n错误,要删除的不存在或者档案不存在!/n/n");
else printf("/n/n删除成功!/n/n");
char c;
printf("/n/n您想---继续删除(A)--退出删除(E)---/n");
c=getch();
if(c=='A'||c=='a')goto loop;else return;
}
void modifym()
{
printf("/n/n/n █修改档案█ ");
loop:
printf("/n/n/n请输入要修改档案的学号:");
char n[20];
scanf("%s",n);
m *p=mhead;
int y=1;
while(p)
{
if(strcmp(n,p->num)==0)
{
//-----------------------------------------------------------------------------
s *p1=shead;
while(p1)
{
if(strcmp(p1->num,p->num)==0) printf("该学生的姓名为%s",p1->name);
p1=p1->next;
}
//---------------------------------------------------------------------------
y=0;
printf("/n请输入新语文成绩/n/n");
scanf("%d",&p->ch);
printf("/n请输入新数学成绩/n/n");
scanf("%d",&p->ma);
printf("/n请输入新英语成绩/n/n");
scanf("%d",&p->en);
}
p=p->next;
}
if(y)printf("/n/n错误,要修改的学号不存在或者档案不存在!/n/n");
else printf("/n/n修改成功!/n/n");
char c;
printf("/n/n您想---继续修改(A)--退出修改(E)---/n");
c=getch();
if(c=='A'||c=='a')goto loop;else return;
}
void release()
{
shead=si=NULL;
mhead=mi=NULL;
printf("/n/n/n清空数据库成功!");
}
void show1()
{
printf("/n |----------------------------------------|");
printf("/n | █ 主 菜 单█ |");
printf("/n |----------------------------------------|");
printf("/n | A 新 建 学 生 |");
printf("/n |----------------------------------------|");
printf("/n | B 创 建 档 案 |");
printf("/n |----------------------------------------|");
printf("/n | C 学 生 信 息 |");
printf("/n |----------------------------------------|");
printf("/n | D 学 生 排 名 |");
printf("/n |----------------------------------------|");
printf("/n | E 管 理 维 护 |");
printf("/n |----------------------------------------|");
printf("/n | F 清 空 信 息 |");
printf("/n |----------------------------------------|");
printf("/n | G 退 出 程 序 |");
printf("/n |----------------------------------------|");
printf("/n | 请您选择一个任务 |");
printf("/n |----------------------------------------|/n/n/n");
}
void show2()
{
printf("/n |-----------------------------|");
printf("/n | █管 理 菜 单█ |");
printf("/n |-----------------------------|");
printf("/n | A 删 除 学 生 |");
printf("/n |-----------------------------|");
printf("/n | B 删 除 档 案 |");
printf("/n |-----------------------------|");
printf("/n | C 修 改 档 案 |");
printf("/n |-----------------------------|");
printf("/n | D 退 出 程 序 |");
printf("/n |-----------------------------|");
printf("/n | 请您选择一个任务 |");
printf("/n |-----------------------------|/n/n/n");
}
void main()
{printf("/n ★ 欢迎使用学生档案管理系统 ★/n/n ");
char ch1,ch2;
initialm();
initials();
do
{
show1();
ch1=getch();
switch(ch1)
{
case 'A':
case 'a':news();break;
case 'B':
case 'b':newm(); break;
case 'C':
case 'c': show(); break;
case 'D':
case 'd':show_rank();break;
case 'E':
case 'e':
do{
show2();
ch2=getch();
switch(ch2)
{
case 'A':
case 'a':dels();break;
case 'B':
case 'b': delm(); break;
case 'C':
case 'c':modifym(); break;
case 'D':
case 'd':break;
}
}while(ch2!='d'&&ch2!='D'); break;
case 'F':
case 'f':release();break;
case 'G':
case 'g':break;
}
}while(ch1!='G'&&ch1!='g');
saves();
savem();
printf("/n/n ★ 谢谢您的使用!★");
}
- C语言学籍管理系统
- C语言实现简单学籍管理系统
- C语言课程设计--学生学籍管理系统
- C语言模拟学生学籍管理系统
- 【C++】学籍管理系统
- 简单的学籍管理系统(C语言编写)
- C语言课程设计——学生学籍管理系统
- 【C语言】处女作,学籍管理_v1.0
- C语言实训作业-简单的学生学籍管理系统
- 学籍管理系统:窗口 - -
- 学籍管理系统建模
- 学生学籍管理系统
- java学籍管理系统
- 学籍管理系统
- 高校学籍管理系统
- 学籍管理系统
- 学生学籍管理系统
- c++学籍管理系统
- 选择实时操作系统(RTOS)的要点详解
- 字节对齐详解
- C语言图书管理系统
- C语言小区居民查询系统
- NIIT面试试题总结
- C语言学籍管理系统
- C语言学生选课系统
- C语言银行系统
- C语言运算测试系统
- 使用struts同步令牌机制避免表单的重复提交
- 121
- 原來.
- A case study in Free vs. Paid and the value of advertising
- 尝试Admob直接电汇到国内的银行