学生学籍管理系统c语言代码(急需,致谢!)

学生学籍管理系统,采用数据文件存放学生的学籍,可对学生学籍进行登录.修改.删除.查找.统计.输出等操作。登录学生的学号.姓名.性别.年龄. 籍贯.系别.专业.班级;修改已知学号的学生信息;删除已知学号的学生信息;查找已知学号的学生信息;按学号输出学生籍贯表。设计一个名为status.c的程序,该程序中的主函数显示系统菜单,并读入用户的选择,然后通过调用其它五个函数来实现系统的五项功能;下面给出主函数和其它五个函数的程序功能供参考:主函数功能:显示功能菜单,读入用户选择,并按用户选择调用函数实现操作。登录学籍记录的函数:功能:以追加方式打开存放学籍的数据文件,向该文件追加若干个学生的信息。修改学籍记录的函数:功能:读入要修改成绩的学生的学号,以只读方式打开存放学籍的数据文件,找到所要修改的记录并修改。删除学籍记录的函数:功能:读入要删除学籍的学生的学号及其它信息,以只读方式打开文件,循环读入每个记录,并依次存入一个临时文件中,当找到要删除的学生的信息后,不将该记录记入此临时文件。查找成绩记录的函数:功能:读入要查找学籍的学生的学号,以只读方式打开存放学籍的数据文件,找到所要查找的记录并显示所有信息。输出学籍表的函数:功能:以只读方式打开文件,循环读入每个记录,并按学号进行排序输出。

第1个回答  2009-05-25
这是一个职工管理系统,自己把名称改一改就行了

#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<string.h>

typedef struct ZHIGONG
{
char zhigongNumber[10];/*职工号*/
char zhigongName[20];/*职工姓名*/
char zhigongsex[4]; /*职工性别*/
char zhigongage[10]; /*出生年月*/
char zhigongedu[10];/*学历*/
char zhigongposition[30]; /*职务*/
char zhigongwage[1000]; /*工资*/
struct ZHIGONG *next;

}ZHIGONG;

ZHIGONG *headLink;/*链表表头指针*/
/*以下是函数声明*/
void ReadInfoFormFile(void);
void DesplayMenu(void);
void CreateHeadLink(void);
ZHIGONG *MallocNode(void);
void GetInformation(ZHIGONG *t);

void InsertOneNode(ZHIGONG *t);
void DesplayInfoByzhigongwage(void);

void DesplayInfoByezhigongedu(void);
void DesplayOneNode(ZHIGONG *t);

void DeleteNodeByzhigongNumber(void);
void OutputInformation(void);
void ChangeMarkByzhigongName(void);
void CompositorByTotalzhigongwage(void);
void CompositorByTotalzhigongedu(void);
void SaveLinkToFile(void);

int choose;/*用于接受用户的选择*/
/*主函数*/
void main()
{
CreateHeadLink();
ReadInfoFormFile();
DesplayMenu();
SaveLinkToFile();
}
/************************************
函数功能:从文件中读职工信息到链表中
************************************/
void ReadInfoFormFile(void)
{
FILE *fp;
ZHIGONG *p;
fp=fopen("zhigong.txt","r");
if(!fp)
{
printf("文件不存在\n");
return;
}

p=MallocNode();
while(fscanf(fp,"%s%s%s%s%s%s%s",p->zhigongNumber,p->zhigongName,p->zhigongsex,
p->zhigongage,p->zhigongedu,p->zhigongposition,p->zhigongwage))
{
InsertOneNode(p);
p=MallocNode();
}

fclose(fp);
}
/************************************
函数功能:显示菜单,根据用户的输入
完成相应的功能
************************************/
void DesplayMenu(void)
{
ZHIGONG *p;
printf("-------请选择相应功能------------\n\n");
printf("| 1 录入职工信息 |\n");
printf("| 2 显示所有职工的信息 |\n");

printf("| 3按工资查询 |\n");
printf("| 4 按学历查询 |\n");

printf("| 5按工资排序 |\n");
printf("| 6 按学历排序 |\n");

printf("| 7 按职工号删除职工信息 |\n");

printf("| 8 按职工号修改职工信息 |\n");

printf("| 9 退出 |\n\n");
scanf("%d",&choose);/*取得用户的选择*/
switch(choose)
{
case 1:
p=MallocNode();/*先申请一个新结点*/
GetInformation(p);/*要求用户输入信息到新结点中*/
InsertOneNode(p);/*将新结点加到链表中*/
break;
case 2:
OutputInformation();/*显示所有职工的信息*/

break;
case 3:
DesplayInfoByzhigongwage();/*根据用户输入的职工工资显示该职工的信息*/
break;
case 4:
DesplayInfoByezhigongedu(); /*根据用户输入的职工学历显示该职工的信息*/
break;
case 5:
CompositorByTotalzhigongwage();/* 按工资排序*/
break;
case 6:
CompositorByTotalzhigongedu();/* 按学历排序*/
break;
case 7:
DeleteNodeByzhigongNumber();/*根据用户输入的职工号删除该职工信息*/

break;
case 8:
ChangeMarkByzhigongName();/*根据用户输入的职工姓名修改该职工信息*/

break;

case 9:
SaveLinkToFile();/*保存数据后再退出*/
free(headLink);

default:
break;
}
DesplayMenu();/*递归调用*/
}

/************************************
函数功能:建立链表表头
************************************/
void CreateHeadLink(void)
{

ZHIGONG *p;
p=(ZHIGONG*)malloc(sizeof(ZHIGONG));
headLink=p;
p->next=NULL;
}
/****************************************
函数功能:申请一个新结点,并将其初始化
*****************************************/
ZHIGONG *MallocNode(void)
{
ZHIGONG *p;
int i;
p=(ZHIGONG*)malloc(sizeof(ZHIGONG));
if(p==NULL)
return NULL;
for(i=0;i<10;i++)
p->zhigongNumber[i]='\0';
for(i=0;i<20;i++)
p->zhigongName[i]='\0';
for(i=0;i<4;i++)
p->zhigongsex[i]='\0';

for(i=0;i<10;i++)
p->zhigongage[i]='\0';

for(i=0;i<10;i++)
p->zhigongedu[i]='\0';

for(i=0;i<30;i++)
p->zhigongposition[i]='\0';
for(i=0;i<1000;i++)
p->zhigongwage[i]='\0';
p->next=NULL;

return p;
}
/************************************
函数功能:取得用户输入的职工信息
************************************/
void GetInformation(ZHIGONG *t)
{
printf("请输入职工号:\n");
scanf("%s",t->zhigongNumber);
printf("请输入职工姓名:\n");
scanf("%s",t->zhigongName);
printf("请输入职工性别:\n");
scanf("%s",t->zhigongsex);
printf("请输入职工出生年月:\n");
scanf("%s",t->zhigongage);
printf("请输入职工学历:\n");
scanf("%s",t->zhigongedu);
printf("请输入职工职位:\n");
scanf("%s",t->zhigongposition);

printf("请输入职工工资:\n");

scanf("%s",t->zhigongwage);

}
/************************************
函数功能:在链表的结尾处增加一个结点
************************************/
void InsertOneNode(ZHIGONG *t)
{
ZHIGONG *p;
p=headLink;
while(p->next)
{
p=p->next;
}
p->next=t;
}
/*************************************************
函数功能:根据用户输入的职工工资显示该职工的信息
**************************************************/
void DesplayInfoByzhigongwage(void)
{
ZHIGONG *p;
char zhigongwage[1000];
char flag=0;
p=headLink->next;
printf("请输入职工的工资:\n");
scanf("%s",zhigongwage);
while(p)
{
if(strcmp(p->zhigongwage,zhigongwage)==0)
{
printf("职工号\t姓名\t性别\t出生年月\t学历\t职务\t工资\n\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag)
printf("对不起,不存在工资为%s的职工\n",zhigongwage);
}
/************************************************
函数功能:根据用户输入的职工学历显示该职工的信息
*************************************************/
void DesplayInfoByezhigongedu(void)
{
ZHIGONG *p;
char zhigongedu[10];
char flag=0;
p=headLink->next;
printf("请输入职工学历:\n");
scanf("%s",zhigongedu);
while(p)
{
if(strcmp(p->zhigongedu,zhigongedu)==0)
{
printf("职工号\t姓名\t性别\t出生年月\t学历\t职务\t工资\n\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag)
printf("对不起,不存在学历为 %s 的职工\n",zhigongedu);
}
/************************************
函数功能:输出一个结点的信息
************************************/
void DesplayOneNode(ZHIGONG *t)
{
printf("%s\t",t->zhigongNumber);
printf("%s\t",t->zhigongName);

printf("%s\t",t->zhigongsex);
printf("%s\t",t->zhigongage);
printf("%s\t",t->zhigongedu);
printf("%s\t",t->zhigongposition);
printf("%s\t\n",t->zhigongwage);
}
/*************************************************
函数功能:根据用户输入的职工号删除该职工的信息
**************************************************/
void DeleteNodeByzhigongNumber(void)
{
char zhigongNumber[10];
ZHIGONG *p,*q;
char flag=0;
printf("请输入要删除的职工的职工号:");
scanf("%s",zhigongNumber);
p=headLink;
q=headLink->next;
while(q)
{
if(strcmp(q->zhigongNumber,zhigongNumber)==0)
{
p->next=q->next;
free(q);
flag=1;
break;
}
p=p->next;
q=q->next;
}
if(!flag)
{
printf("不存在该职工号的职工\n");
return;
}
printf("成功删除\n");
}
/************************************
函数功能:显示所有职工的信息
************************************/
void OutputInformation(void)
{
ZHIGONG *p;
p=headLink->next;
if(p==NULL)
{
printf("现在没有职工信息,请先输入职工信息\n\n");
return;
}
printf("职工号\t姓名\t性别\t出生年月\t学历\t职务\t工资\n\n");
while(p)
{
DesplayOneNode(p);
p=p->next;
}
}
/*********************************************
函数功能:根据输入的职工姓名修改员工的信息
**********************************************/
void ChangeMarkByzhigongName(void)

{
ZHIGONG *p;
char zhigongName[10];
char flag=0;
char zhigongedu,zhigongwage,zhigongage,zhigongNumber,zhigongsex,zhigongposition;
p=headLink->next;
printf("请输入职工姓名:\n");
scanf("%s",zhigongName);
while(p)
{
if(strcmp(p->zhigongName,zhigongName)==0)
{
printf("请输入新的职工号:\n");
scanf("%s",&zhigongNumber);
printf("请输入新的学历:\n");
scanf("%s",&zhigongedu);
printf("请输入新的工资:\n");
scanf("%s",&zhigongwage);
printf("请输入新的出生年月:\n");
scanf("%s",&zhigongage);
printf("请输入新的性别:\n");
scanf("%s",&zhigongsex);
printf("请输入新的职位:\n");
scanf("%s",&zhigongposition);

strcpy(p->zhigongposition,&zhigongposition);
strcpy(p->zhigongsex,&zhigongsex);
strcpy(p->zhigongNumber,&zhigongNumber);
strcpy(p->zhigongedu,&zhigongedu);
strcpy(p->zhigongwage,&zhigongwage);
strcpy(p->zhigongage,&zhigongage);
flag=1;
printf("修改成功\n");
break;
}
p=p->next;
}
if(!flag)
printf("对不起,不存在姓名为 %s 的职工\n",zhigongName);
}
/************************************
函数功能:保存链表数据到文件中
************************************/
void SaveLinkToFile(void)
{
ZHIGONG *p;
FILE *fp;
p=headLink->next;
if(p==NULL)
{
printf("现在没有职工信息,请先输入职工信息\n\n");
return;
}
fp=fopen("zhigong.txt","w+");
if(!fp)
{
printf("文件不存在\n");
return;
}
while(p)
{
fprintf(fp,"%s%s%s%s%s%s%s",p->zhigongNumber,p->zhigongName,p->zhigongsex,
p->zhigongage,p->zhigongedu,p->zhigongposition,p->zhigongwage);
p=p->next;

}
fclose(fp);
}

/************************************
函数功能:按职工工资排序
************************************/
void CompositorByTotalzhigongwage(void)
{
ZHIGONG exchange,*r,*p,*q;
r=headLink->next;
if(r==NULL)
{
printf("现在还没职工信息,请先输入职工信息\n");
return;
}
while(r)/*两层while循环实现排序*/
{
p=r;
q=r->next;
while(q)
{
if((p->zhigongwage)>(p->zhigongwage))
{
strcpy(exchange.zhigongNumber,q->zhigongNumber);/*先复制q结点信息到exchange*/
strcpy(exchange.zhigongName,q->zhigongName);
strcpy(exchange.zhigongsex,q->zhigongsex);
strcpy(exchange.zhigongage,q->zhigongage);

strcpy(exchange.zhigongedu,q->zhigongedu);
strcpy(exchange.zhigongposition,q->zhigongposition);
strcpy(exchange.zhigongwage,q->zhigongwage);

strcpy(q->zhigongNumber,p->zhigongNumber);/*再复制p结点信息到q*/
strcpy(q->zhigongName,p->zhigongName);
strcpy(q->zhigongsex,p->zhigongsex);
strcpy(q->zhigongage,p->zhigongage);

strcpy(q->zhigongedu,p->zhigongedu);
strcpy(q->zhigongposition,p->zhigongposition);
strcpy(q->zhigongwage,p->zhigongwage);

strcpy(p->zhigongNumber,exchange.zhigongNumber);/*最后复制exchange结点信息到p*/
strcpy(p->zhigongName,exchange.zhigongName);
strcpy(p->zhigongsex,exchange.zhigongsex);
strcpy(p->zhigongage,exchange.zhigongage);
strcpy(p->zhigongedu,exchange.zhigongedu);
strcpy(p->zhigongposition,exchange.zhigongposition);
strcpy(p->zhigongwage,exchange.zhigongwage);
}
q=q->next;
}
r=r->next;
}
OutputInformation();
}

/************************************
函数功能:按职工学历排序
************************************/
void CompositorByTotalzhigongedu(void)
{
ZHIGONG exchange,*r,*p,*q;
r=headLink->next;
if(r==NULL)
{
printf("现在还没职工信息,请先输入职工信息\n");
return;
}
while(r)/*两层while循环实现排序*/
{
p=r;
q=r->next;
while(q)
{
if((q->zhigongedu)>(p->zhigongedu))
{
strcpy(exchange.zhigongNumber,q->zhigongNumber);/*先复制q结点信息到exchange*/
strcpy(exchange.zhigongName,q->zhigongName);
strcpy(exchange.zhigongsex,q->zhigongsex);
strcpy(exchange.zhigongage,q->zhigongage);

strcpy(exchange.zhigongedu,q->zhigongedu);
strcpy(exchange.zhigongposition,q->zhigongposition);
strcpy(exchange.zhigongwage,q->zhigongwage);

strcpy(q->zhigongNumber,p->zhigongNumber);/*再复制p结点信息到q*/
strcpy(q->zhigongName,p->zhigongName);
strcpy(q->zhigongsex,p->zhigongsex);
strcpy(q->zhigongage,p->zhigongage);

strcpy(q->zhigongedu,p->zhigongedu);
strcpy(q->zhigongposition,p->zhigongposition);
strcpy(q->zhigongwage,p->zhigongwage);

strcpy(p->zhigongNumber,exchange.zhigongNumber);/*最后复制exchange结点信息到p*/
strcpy(p->zhigongName,exchange.zhigongName);
strcpy(p->zhigongsex,exchange.zhigongsex);
strcpy(p->zhigongage,exchange.zhigongage);
strcpy(p->zhigongedu,exchange.zhigongedu);
strcpy(p->zhigongposition,exchange.zhigongposition);
strcpy(p->zhigongwage,exchange.zhigongwage);
}
q=q->next;
}
r=r->next;
}
OutputInformation();
}

参考资料:网上

本回答被提问者采纳
相似回答