㈠ c语言设计 学生学籍系统
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
intshoudsave=0;/**/
structstudent
{
charnum[10];/*学号*/
charname[20];
charsex[4];
charyuan;
intban;
charneartime[10];/*最近更新时间*/
};
typedefstructnode
{
structstudentdata;
structnode*next;
}Node,*Link;
voidmenu()
{
printf("********************************************************************************");
printf(" 1登记学生资料 2删除学生资料 ");
printf(" 3查询学生资料 4修改学生资料 ");
printf(" 5保存学生资料 0退出系统 ");
printf("******************************************************************************** ");
}
voidprintstart()
{
printf("----------------------------------------------------------------------- ");
}
voidWrong()
{
printf(" =====>提示:输入错误! ");
}
voidNofind()
{
printf(" =====>提示:没有找到该学生! ");
}
voidprintc()/*本函数用于输出中文*/
{
printf("学号 姓名性别学院班级 ");
}
voidprinte(Node*p)/*本函数用于输出英文*/
{
printf("%-12s%s %s %c %d ",p->data.num,p->data.name,p->data.sex,p->data.yuan,p->data.ban);
}
Node*Locate(Linkl,charfindmess[],charnameornum[])/*该函数用于定位连表中符合要求的接点,并返回该指针*/
{
Node*r;
if(strcmp(nameornum,"num")==0)/*按学号查询*/
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.num,findmess)==0)
returnr;
r=r->next;
}
}
elseif(strcmp(nameornum,"name")==0)/*按姓名查询*/
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.name,findmess)==0)
returnr;
r=r->next;
}
}
return0;
}
voidAdd(Linkl)/*增加学生*/
{
Node*p,*r,*s;
charnum[10];
r=l;
s=l->next;
while(r->next!=NULL)
r=r->next;/*将指针置于最末尾*/
while(1)
{
printf("请你输入学号(以'0'返回上一级菜单:)");
scanf("%s",num);
if(strcmp(num,"0")==0)
break;
while(s)
{
if(strcmp(s->data.num,num)==0)
{
printf("=====>提示:学号为'%s'的学生已经存在,若要修改请你选择'4修改'! ",num);
printstart();
printc();
printe(s);
printstart();
printf(" ");
return;
}
s=s->next;
}
p=(Node*)malloc(sizeof(Node));
strcpy(p->data.num,num);
printf("请你输入姓名:");
scanf("%s",p->data.name);
getchar();
printf("请你输入性别:");
scanf("%s",p->data.sex);
getchar();
printf("请你输入学院:");
scanf("%c",&p->data.yuan);
getchar();
printf("请你输入班级:");
scanf("%d",&p->data.ban);
getchar();
/*信息输入已经完成*/
p->next=NULL;
r->next=p;
r=p;
shoudsave=1;}
}
voidQur(Linkl)/*查询学生*/
{
intsel;
charfindmess[20];
Node*p;
if(!l->next)
{
printf(" =====>提示:没有资料可以查询! ");
return;
}
printf(" =====>1按学号查找 =====>2按姓名查找 ");
scanf("%d",&sel);
if(sel==1)/*学号*/
{
printf("请你输入要查找的学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf(" 查找结果 ");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
elseif(sel==2)/*姓名*/
{
printf("请你输入要查找的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
printf(" 查找结果 ");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else
Wrong();
}
voidDel(Linkl)/*删除*/
{
intsel;
Node*p,*r;
charfindmess[20];
if(!l->next)
{
printf(" =====>提示:没有资料可以删除! ");
return;
}
printf(" =====>1按学号删除 =====>2按姓名删除 ");
scanf("%d",&sel);
if(sel==1)
{
printf("请你输入要删除的学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf(" =====>提示:该学生已经成功删除! ");
shoudsave=1;
}
else
Nofind();
}
elseif(sel==2)
{
printf("请你输入要删除的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf(" =====>提示:该学生已经成功删除! ");
shoudsave=1;
}
else
Nofind();
}
else
Wrong();
}
voidModify(Linkl)
{
Node*p;
charfindmess[20];
if(!l->next)
{
printf(" =====>提示:没有资料可以修改! ");
return;
}
printf("请你输入要修改的学生学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("请你输入新学号(原来是%s):",p->data.num);
scanf("%s",p->data.num);
printf("请你输入新姓名(原来是%s):",p->data.name);
scanf("%s",p->data.name);
getchar();
printf("请你输入新性别(原来是%s):",p->data.sex);
scanf("%s",p->data.sex);
printf("请你输入新的学院:",p->data.yuan);
scanf("%c",&p->data.yuan);
getchar();
printf("请你输入新的班级(原来是%d):",p->data.ban);
scanf("%d",&p->data.ban);
getchar();
printf(" =====>提示:资料修改成功! ");
shoudsave=1;
}
else
Nofind();
}
voidSave(Linkl)
{
FILE*fp;
Node*p;
intflag=1,count=0;
fp=fopen("c:\student","wb");
if(fp==NULL)
{
printf(" =====>提示:重新打开文件时发生错误! ");
exit(1);
}
p=l->next;
while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)
{
p=p->next;
count++;
}
else
{
flag=0;
break;
}
}
if(flag)
{
printf(" =====>提示:文件保存成功.(有%d条记录已经保存.) ",count);
shoudsave=0;
}
fclose(fp);
}
voidmain()
{
Linkl;/*连表*/
FILE*fp;/*文件指针*/
intsel;
charch;
charjian;
intcount=0;
Node*p,*r;
printf(" 学生成绩管理系统 -------建筑电气及智能化0801 ");
l=(Node*)malloc(sizeof(Node));
l->next=NULL;
r=l;
fp=fopen("C:\student","rb");
if(fp==NULL)
{
printf(" =====>提示:文件还不存在,是否创建?(y/n) ");
scanf("%c",&jian);
if(jian=='y'||jian=='Y')
fp=fopen("C:\student","wb");
else
exit(0);
}
printf(" =====>提示:文件已经打开,正在导入记录...... ");
while(!feof(fp))
{
p=(Node*)malloc(sizeof(Node));
if(fread(p,sizeof(Node),1,fp))/*将文件的内容放入接点中*/
{
p->next=NULL;
r->next=p;
r=p;/*将该接点挂入连中*/
count++;
}
}
fclose(fp);/*关闭文件*/
printf(" =====>提示:记录导入完毕,共导入%d条记录. ",count);
while(1)
{
menu();
printf("请你选择操作:");
scanf("%d",&sel);
if(sel==0)
{
if(shoudsave==1)
{getchar();
printf(" =====>提示:资料已经改动,是否将改动保存到文件中(y/n)? ");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(l);
}
printf(" =====>提示:你已经退出系统,再见! ");
break;
}
switch(sel)
{
case1:Add(l);break;/*增加学生*/
case2:Del(l);break;/*删除学生*/
case3:Qur(l);break;/*查询学生*/
case4:Modify(l);break;/*修改学生*/
case5:Save(l);break;/*保存学生*/
case9:printf(" ==========帮助信息========== ");break;
default:Wrong();getchar();break;
}
}
}
㈡ C语言设计一个学生学籍管理系统,要求文件形式保存,且用到链表
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//链表结点结构体声明
typedefstructsubjects
{
charname[20];
floatscore;
}sub;
typedefstructstudent
{
intnum;
charname[20];
subsubject[3];
structstudent*next;
}stu,*pstu;
#defineSIZEsizeof(stu)
//函数申明
pstuLoadInfo();
voidPrintMenu();
pstuAddStu(pstu);
pstuDeleStu(pstu);
pstuRwrStu(pstu);
voidFindStu(pstu,char);
voidCount(pstu,char*,float,float);
voidRank(pstu,char*);
voidSaveQuit(pstu);
//主函数
intmain()
{
floatscore1,score2;
charn,j;
charsubname[20];
pstuhead,ptr;
head=LoadInfo();
ptr=head->next;
//创建菜单,进入选择循环
while(1)
{
PrintMenu();
printf("请输入您的选择编号:");
scanf("%d",&n);
getchar();
switch(n)
{
case1:
{
system("cls");
j=0;
while(4!=j)
{
printf("欢迎进入信息管理版块! ");
printf("