学籍管理系统.docx
《学籍管理系统.docx》由会员分享,可在线阅读,更多相关《学籍管理系统.docx(18页珍藏版)》请在冰点文库上搜索。
学籍管理系统
学生学籍信息管理系统设计--C语言程序
#include
#include
#defineNULL0
#defineLENsizeof(structstudent)
structstudent
{longnum;
intscore;structstudent*next;
};
intn;
structstudent*creat()
{structstudent*head;
structstudent*p1,*p2;
n=0;
p1=p2=(structstudent*)malloc(LEN);
scanf("%ld,%d",&p1->num,&p1->score);
head=NULL;
while(p1->num!
=0)
{n=n+1;
if(n==1)head=p1;
elsep2->next=p1;
p2=p1;
p1=(structstudent*)malloc(LEN);
scanf("%ld,%d",&p1->num,&p1->score);
}
p2->next=NULL;
return(head);
}
voidprint(structstudent*head)
{structstudent*p;
printf("\nNow,These%drecordsare:
\n",n);
p=head;
if(head!
=NULL)
do
{printf("%ld%d\n",p->num,p->score);
p=p->next;
}while(p!
=NULL);
}
structstudent*del(structstudent*head,longnum)
{structstudent*p1,*p2;
if(head==NULL){printf("\nlistnull!
\n");gotoend;}
p1=head;
while(num!
=p1->num&&p1->next!
=NULL)
{p2=p1;p1=p1->next;}
if(num==p1->num)
{if(p1==head)head=p1->next;
elsep2->next=p1->next;
printf("delete:
%ld\n",num);
n=n-1;
}
elseprintf("%ldnotbeenfound!
\n",num);
end:
return(head);
}
structstudent*insert(structstudent*head,structstudent*stud)
{structstudent*p0,*p1,*p2;
p1=head;
p0=stud;
if(head==NULL)
{head=p0;p0->next=NULL;}
else
{
#include
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
structEmployee
{//声明职工的结构作为链表节点。
//-----数据域-----
stringm_Code;
stringm_Name;
unsignedshortintm_Year;
stringm_Sex;
stringm_Post;
stringm_Department;
unsignedintm_Wage;
//链表节点的指针域---
structEmployee*Next;
};
//-----个人习惯:
取别名-------
typedefstructEmployeeNode;
typedefNode*Link;
//-------函数声明-------------
LinkCreate(LinkHead);
voidRelease(LinkHead);
LinkAdd(LinkHead);
boolSearch(LinkHead);
LinkSearch_Unique(LinkHead);
voidDisplay_List(LinkHead);
voidDisplay_Node(LinkpNode);
LinkModify(LinkHead);
LinkDel(LinkHead);
voidSave_ByFile(LinkHead,fstream&ofile);
LinkSort(LinkHead);
//-------函数实现--------------------------
LinkCreate(LinkHead)
{//创建一个带头节点的空链表。
Head=(Link)newNode;
if(!
Head)
{
cout<<"分配内存失败!
"<returnNULL;
}
Head->m_Code="";
Head->m_Name="";
Head->m_Year=0;
Head->m_Sex="";
Head->m_Post="";
Head->m_Department="";
Head->m_Wage=0;
Head->Next=NULL;
returnHead;
}
voidRelease(LinkHead)
{//释放链表。
Linkptr;//声明一个操作用的指针。
while(Head!
=NULL)
{
ptr=Head;
Head=Head->Next;
deleteptr;//释放节点资源。
}
}
LinkAdd(LinkHead)
{//前插法添加数据。
LinkpNew;//声明一个新节点。
charagain;
stringcode,name,sex,post,department;
unsignedshortintyear;
unsignedintwage;
do
{
pNew=(Link)newNode;
//数据域。
cout<<"请输入职工代码:
";
cin>>code;
cout<";
cin>>name;
cout<";
cin>>year;
while(cin.fail())
{
cout<<"请输入正确的年份格式。
"<cin.clear();
fflush(stdin);
cin>>year;
}
cout<";
cin>>sex;
cout<";
cin>>post;
cout<";
cin>>department;
cout<";
cin>>wage;
while(cin.fail())
{
cout<<"请输入正确的工资数据。
"<cin.clear();
fflush(stdin);
cin>>wage;
}
cout<pNew->m_Code=code;
pNew->m_Name=name;
pNew->m_Year=year;
pNew->m_Sex=sex;
pNew->m_Post=post;
pNew->m_Department=department;
pNew->m_Wage=wage;
//指针域。
pNew->Next=Head->Next;
Head->Next=pNew;
cout<<"数据添加成功!
是否继续添加?
(Y/N)"<cin>>again;
}while(again=='Y'||again=='y');
returnHead;
}
boolSearch(LinkHead)
{//查询同时满足“姓名”和“部门”的职工信息。
Linkptr;
stringdepartment;
stringname;
ptr=Head->Next;
cout<<"请输入部门:
";
cin>>department;
cout<";
cin>>name;
cout<while(ptr)
{
if((ptr->m_Name==name)&&(ptr->m_Department==department))
{
Display_Node(ptr);//打印满足条件的节点。
returntrue;
}
ptr=ptr->Next;//查询下一节点。
}
cout<<"无此职工的信息。
"<returnfalse;
}
LinkSearch_Unique_Front(LinkHead)
{//查询满足“职工代码“的职工信息(职工代码必需唯一)。
Linkptr;
stringcode;
ptr=Head;
cout<<"请输入职工代码:
";
cin>>code;
cout<while(ptr->Next)
{
if(ptr->Next->m_Code==code)
//Display_Node(ptr);//打印满足条件的节点。
returnptr;//注意,是返回的查询到的节点的直接前趋节点。
ptr->Next=ptr->Next->Next;//查询下一节点。
}
returnptr;
}
voidDisplay_List(LinkHead)
{
Linkptr;
ptr=Head->Next;
cout<<"==================所有职工信息=================="<while(ptr)
{
Display_Node(ptr);
ptr=ptr->Next;
}
}
voidDisplay_Node(LinkpNode)
{//在标准输出设备上输出。
cout<m_Code
<m_Name
<m_Year
<m_Sex
<m_Post
<m_Department
<m_Wage<}
LinkModify(LinkHead)
{//修改单一个节点。
Linkptr;
ptr=Search_Unique_Front(Head);
stringcode,name,sex,post,department;
unsignedshortintyear;
unsignedintwage;
if(ptr->Next)
{
cout<<"-------你现在可以修改此职工的信息了-------"<//数据域。
cout<<"请输入职工代码:
";
cin>>code;
cout<";
cin>>name;
cout<";
cin>>year;
while(cin.fail())
{
cout<<"请输入正确的年份格式。
"<cin.clear();
fflush(stdin);
cin>>year;
}
cout<";
cin>>sex;
cout<";
cin>>post;
cout<";
cin>>department;
cout<";
cin>>wage;
while(cin.fail())
{
cout<<"请输入正确的工资数据。
"<cin.clear();
fflush(stdin);
cin>>wage;
}
cout<ptr->Next->m_Code=code;//因ptr是前趋节点,所以要用ptr->Next;
ptr->Next->m_Name=name;
ptr->Next->m_Year=year;
ptr->Next->m_Sex=sex;
ptr->Next->m_Post=post;
ptr->Next->m_Department=department;
ptr->Next->m_Wage=wage;
}
cout<<"没找到此职工的记录,无法修改。
"<returnHead;
}
LinkDel(LinkHead)
{
Linkptr;
Linkptr_front;
ptr_front=Search_Unique_Front(Head);
ptr=ptr_front->Next;
if(ptr)
{
ptr_front->Next=ptr->Next;
deleteptr;//删除此节点。
}
cout<<"没找到此职工的记录,无法删除。
"<returnHead;
}
voidSave_ByFile(LinkHead,fstream&ofile)
{
LinkpNode;
pNode=Head->Next;
ofile.clear();//清除文件结束状态。
while(pNode)
{
ofile<m_Code
<m_Name
<m_Year
<m_Sex
<m_Post
<m_Department
<m_Wage<pNode=pNode->Next;
}
cout<<"数据文件保存成功!
"<}
LinkSort(LinkHead)
{//我创建的是带头节点的链表。
用直接插入法。
if((Head->Next==NULL)||(Head->Next->Next==NULL))//此步条件判断非常有价值。
{
cout<<"数据节点数少于2个,不用排序!
"<returnHead;
}
//-----------第二步;
Linkptr;
Linkptr_F;
Linkptr_N;
ptr=Head->Next->Next;
ptr_F=Head;
Head->Next->Next=NULL;//到此,分成了两个链表。
//第三步。
while(ptr)
{
ptr_N=ptr->Next;
ptr_F=Head;//ptr_F的归位。
while(ptr_F->Next)
{
if(ptr->m_Wage>ptr_F->Next->m_Wage)
{
ptr->Next=ptr_F->Next;
ptr_F->Next=ptr;
break;
}//if
else
{
ptr_F=ptr_F->Next;
}
}//while(ptr_F->Next)
if(ptr_F->Next==NULL)
{
ptr->Next=ptr_F->Next;
ptr_F->Next=ptr;//表示插到有序链表的最后面了。
}
ptr=ptr_N;//归位,准备下一次排序。
}//while(ptr)
cout<<"从高到低,排序成功!
"<returnHead;
}
intmain()
{
LinkHead=0;
Head=Create(Head);
fstreamiofile;
iofile.open("d:
\\iofile.txt",ios_base:
:
in|ios_base:
:
out|ios_base:
:
app);//文件以三种方式打开。
if(!
iofile)
{
cout<<"打开文件失败!
"<return-1;
}
intmenu;
while
(1)
{
cout<<"*****************************************************"<cout<<"*====================菜单选顶=======================*"<cout<<"*===================================================*"<cout<<"*1.注册职工2.修改信息3.删除信息4.信息查询*"<cout<<"*5.保存文件6.工资排行7.信息显示0.退出系统*"<cout<<"*****************************************************"<cout<";
cin>>menu;
while(cin.fail())
{
cout<<"请选择正确的菜单选项。
"<cin.clear();
fflush(stdin);
cin>>menu;
}
switch(menu)
{
case0:
cout<<"成功退出系统!
"<return0;
case1:
Head=Add(Head);
break;
case2:
Head=Modify(Head);
break;
case3:
Head=Del(Head);
break;
case4:
Search(Head);
break;
case5:
Save_ByFile(Head,iofile);
break;
case6:
Sort(Head);
break;
case7:
Display_List(Head);
break;
default:
cout<<"请选择正确的菜单项进行操作。
多谢合作!
"<}
}
Release(Head);
iofile.close();
return0;
}
可以参考我这个是以学生信息为例的
#include"stdio.h"/*I/O函数*/
#include"stdlib.h"/*其它说明*/
#include"string.h"/*字符串函数*/
#include"conio.h"/*屏幕操作函数*/
#include"mem.h"/*内存操作函数*/
#include"ctype.h"/*字符操作函数*/
#include"alloc.h"/*动态地址分配函数*/
structscore
{
intmingci;
charxuehao[8];
charmingzi[20];
floatscore[6];
}data,info[1000];
inti,j,k=0;
chartemp[20],ch;
FILE*fp,*fp1;
voidshuru()
{
if((fp=fopen("s_score.txt","ab+"))==NULL)
{
printf("cannotopenthisfile.\n");
getch();exit(0);
}
for(i=0;i<=1000;i++)
{
printf("\nPleaseshuruxuehao:
");
gets(data.xuehao);
printf("Pleaseshurumingzi:
");
gets(data.mingzi);
printf("Pleaseshuruyuwenscore:
");
gets(temp);data.score[0]=atof(temp);
printf("Pleaseshurushuxuescore:
");
gets(temp);data.score[1]=atof(temp);
printf("Pleaseinputyingyuscore:
");
gets(temp);data.score[2]=atof(temp);
printf("Pleaseshuruwuliscore:
");
gets(temp);data.score[3]=atof(temp);
printf("Pleaseshurhuaxuescore:
");
gets(temp);data.score[4]=atof(temp);
data.score[5]=data.score[0]+data.score[1]+data.score[2]+data.score[3]+data.score[4];
fwrite(&data,sizeof(data),1,fp);