人員管理c課程設計
㈠ C語言課程設計 職工信息管理系統
我這有個學生成績管理系統的c程序 是去年我們的設計題目給你參考一下啦 感覺都一個樣了基本相同 這個設計嘛 還是要自己寫的 只有這樣才可以學好c的,而且c語言很有用的是語言學的基礎。你肯定是工科的學生吧,這樣就跟重要了,像人家清華大學的c語言課就三節一學期下來,到後來每個人都有幾個這樣的課程設計題目,好幾百行的他們都能編出來,不是他們聰明,當然肯定不笨了...所以啊都是個氛圍和興趣的問題了。多參考參考是對的,在圖書館借幾本相關的書籍看看,上網查查,但不要復制別人的就可以了.....
這個給你參考一下吧
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<string.h>
typedef struct STUDENT
{
char studentNumber[10];/*學生學號*/
char studentName[20];/*學生姓名*/
char className[20];/*班級名稱*/
float mark1;/*第1門成績*/
float mark2;/*第2門成績*/
float mark3;/*第3門成績*/
struct STUDENT *next;
}STUDENT;
STUDENT *headLink;/*鏈表表頭指針*/
/*以下是函數聲明*/
void ReadInfoFormFile(void);
void DesplayMenu(void);
void CreateHeadLink(void);
STUDENT *MallocNode(void);
void GetInformation(STUDENT *t);
void OutputInformation(void);
void DesplayInfoBystudentName(void);
void DesplayInfoBystudentNumber(void);
void DesplayOneNode(STUDENT *t);
void InsertOneNode(STUDENT *t);
void DeleteNodeBystudentNumber(void);
void ChangeMarkByName(void);
void ChangeMarkByNumber(void);
void SaveLinkToFile(void);
void DesplayMarkSegment(void);
void CompositorByTotalMark(void);
int choose;/*用於接受用戶的選擇*/
/*主函數*/
main()
{
CreateHeadLink();
ReadInfoFormFile();
DesplayMenu();
}
/************************************
函數功能:從文件中讀學生信息到鏈表中
************************************/
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 DesplayMenu(void)
{
STUDENT *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");
printf("| 10 排序結果並輸出績 |\n");
printf("| 11 退出 |\n\n");
scanf("%d",&choose);/*取得用戶的選擇*/
switch(choose)
{
case 1:
OutputInformation();/*顯示所有學生的信息*/
break;
case 2:
DesplayInfoBystudentName();
break;
case 3:
DesplayInfoBystudentNumber();/*根據用戶輸入的學號顯示該學生的信息*/
break;
case 4:
p=MallocNode();/*先申請一個新結點*/
GetInformation(p);/*要求用戶輸入信息到新結點中*/
InsertOneNode(p);/*將新結點加到鏈表中*/
break;
case 5:
DeleteNodeBystudentNumber();/*根據用戶輸入的學號刪除該學生*/
break;
case 6:
ChangeMarkByName();/*根據用戶輸入的姓名修改學生成績*/
break;
case 7:
ChangeMarkByNumber();/*根據用戶輸入的學號修改學生成績*/
break;
case 8:
SaveLinkToFile();/*保存數據*/
break;
case 9:
DesplayMarkSegment();/*顯示各分數段的學生成績*/
break;
case 10:
CompositorByTotalMark();
break;
case 11:
SaveLinkToFile();/*保存數據後再退出*/
free(headLink);
exit(1);
break;
default:
break;
}
DesplayMenu();/*遞歸調用*/
}
/************************************
函數功能:建立鏈表表頭
************************************/
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[i]='\0';
for(i=0;i<20;i++)
p->studentName[i]='\0';
for(i=0;i<20;i++)
p->className[i]='\0';
p->mark1=0.0;
p->mark2=0.0;
p->mark3=0.0;
p->next=NULL;
return p;
}
/************************************
函數功能:取得用戶輸入的學生信息
************************************/
void GetInformation(STUDENT *t)
{
printf("請輸入學生學號:\n");
scanf("%s",t->studentNumber);
printf("請輸入學生姓名:\n");
scanf("%s",t->studentName);
printf("請輸入該生所在班級:\n");
scanf("%s",t->className);
printf("請輸入第1門成績:\n");
scanf("%f",&(t->mark1));
printf("請輸入第2門成績:\n");
scanf("%f",&(t->mark2));
printf("請輸入第3門成績:\n");
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("請輸入學生姓名:\n");
scanf("%s",studentName);
while(p)
{
if(strcmp(p->studentName,studentName)==0)
{
printf("學號\t姓名\t班級\t成績1\t成績1\t成績3\t總成績\t平均成績\n\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag)
printf("對不起,不存在姓名為 %s 的學生\n",studentName);
}
/************************************
函數功能:根據用戶輸入的學號顯示該學生的信息
************************************/
void DesplayInfoBystudentNumber(void)
{
STUDENT *p;
char studentNumber[10];
char flag=0;
p=headLink->next;
printf("請輸入學生學號:\n");
scanf("%s",studentNumber);
while(p)
{
if(strcmp(p->studentNumber,studentNumber)==0)
{
printf("學號\t姓名\t班級\t成績1\t成績1\t成績3\t總成績\t平均成績\n\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag)
printf("對不起,不存在學號為 %s 的學生\n",studentNumber);
}
/************************************
函數功能:輸出一個結點的信息
************************************/
void DesplayOneNode(STUDENT *t)
{
printf("%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)
{
printf("不存在該學號的學生\n");
return;
}
printf("成功刪除\n");
}
/************************************
函數功能:顯示所有學生的信息
************************************/
void OutputInformation(void)
{
STUDENT *p;
p=headLink->next;
if(p==NULL)
{
printf("現在沒有學生信息,請先輸入學生信息\n\n");
return;
}
printf("學號\t姓名\t班級\t成績1\t成績1\t成績3\t總成績\t平均成績\n\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("請輸入學生姓名:\n");
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)
printf("對不起,不存在姓名為 %s 的學生\n",studentName);
}
/************************************
函數功能:根據輸入的學號修改成績
************************************/
void ChangeMarkByNumber(void)
{
STUDENT *p;
char studentNumber[20];
char flag=0;
float mark1,mark2,mark3;
p=headLink->next;
printf("請輸入學生學號:\n");
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)
printf("對不起,不存在學號為 %s 的學生\n",studentNumber);
}
/************************************
函數功能:保存鏈表數據到文件中
************************************/
void SaveLinkToFile(void)
{
STUDENT *p;
FILE *fp;
p=headLink->next;
if(p==NULL)
{
printf("現在沒有學生信息,請先輸入學生信息\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("60分以下(不及格)的學生成績如下:\n");
printf("學號\t姓名\t班級\t成績1\t成績1\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("不及格的學生一共有%d人\n",count);
p=headLink->next;
printf("成績優秀的學生成績如下:\n");
printf("學號\t姓名\t班級\t成績1\t成績1\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("成績優秀的學生一共有%d人\n",count);
}
/************************************
函數功能:按總成績排序
************************************/
void CompositorByTotalMark(void)
{
STUDENT 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->mark1+q->mark2+q->mark3)>(p->mark1+p->mark2+p->mark3))
{
strcpy(exchange.studentNumber,q->studentNumber);/*先復制q結點信息到exchange*/
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);/*再復制p結點信息到q*/
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);/*最後復制exchange結點信息到p*/
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();
}
祝你學好c語言。我不是沖著分來的,就是想讓你能好好認識到什麼是大學的真諦,這樣的實踐菜能讓你逐漸成熟!
㈡ C語言課程設計 職工管理系統
其實網上這個課題答案很多,這個可以運行#include<string.h>
void menu()
{
int n,w1;
do
{
printf("\t\t************************************************\n\n");
printf("\t\t************************************************\n\n");
printf("\t\t *** choose function ************\n\n");
printf("\t\t *** 1 Enter new data ************\n\n");
printf("\t\t *** 2 Modify data ************\n\n");
printf("\t\t *** 3 Search by people.xueli and num*****\n\n");
printf("\t\t *** 4 Browse data ************\n\n");
printf("\t\t *** 5 add data ************\n\n");
printf("\t\t *** 6 Exit ************\n\n");
printf("\t\t************************************************\n\n");
printf("\t\t************************************************\n\n");
printf("Choose your number(1-6):[ ]\b\b");
scanf("%d",&n);
if(n<1||n>6)
w1=1;
else w1=0;
}
while(w1==1);
switch(n)
{
case 1:enter();break;
case 2:modify();break;
case 3:search();break;
case 4:browse();break;
case 5:add();break;
case 6:exit(0);
}
}
main()
{
system("cls");
menu();
}
#define N 100
struct people
{
char num[100];
char name[15];
char sex[20];
char age[20];
char xueli[20];
char gong[20];
char address[20];
char telephone[20];
}people[N];
# include <stdio.h>
enter()
{
int i,n;
printf("How many people(0-%d)?:",N-1);
scanf("%d",&n);
printf("\n Enter data now\n\n");
for(i=0;i<n;i++)
{
printf("\n Input %dth people record.\n",i+1);
input(i);
}
if(i!=0)save(n);
printf_back();
}
browse()
{
int i,j,n;
n=load();
printf_face();
for(i=0;i<n;i++)
{
if((i!=0)&&(i%10==0))
{
printf("\n\nPass any key to continue ....");
getch();
puts("\n\n");
}
printf_one(i) ;
}
printf("\tThere are %d record.\n",n);
printf("\nPass any key to back ...");
getch();
menu();
}
add()
{
int i,n,m,k;
FILE*fp;
n=load();
printf("How many people are you want to add(0-%d)?:",N-1-n);
scanf("%d",&m);
k=m+n;
for(i=n;i<k;i++)
{
printf("\nInput %dth people record.\n",i-n+1 );
input(i);
}
if((fp=fopen("Pro.txt","ab"))==NULL)
{
printf("cannot open file\n");
}
for(i=n;i<k;i++)
if(fwrite(&people[i],sizeof(struct people),1,fp)!=1)
printf("file write error\n");
fclose(fp);
printf_back();
}
search()
{
int i,n,k,w1=1,w2,w3,w4,m,a;
struct people p;
n=load();
do
{
printf("\n\nWhich way do you want to choose? \n\t1).By xueli 2).By num [ ]\b\b");
scanf("%d",&m);
switch(m)
{
case 1:
do
{ k=-1;
printf("\n\nEnter xeuli that you want to search! xueli.");
scanf("%s",p.xueli);
printf_face();
for(i=0;i<n;i++)
if(strcmp(p.xueli,people[i].xueli)==0)
{ k=i;
printf_one(k);break;
}
if(k==-1)
{ printf("\n\nNO exist!please");
printf("\n\nAre you again?\n\t1).again 2).NO and back [ ]\b\b");
scanf("%d",&w1);
if(w1==2)
printf_back();
}
}
while(k==-1&&w1==1);break;
case 2:
do
{k=-1;
printf("\n\nEnter num that you want to search! num.");
scanf("%s",p.num);
printf_face();
for(i=0;i<n;i++)
if(strcmp(p.num,people[i].num)==0)
{k=i;
printf_one(k);break;
}
if(k==-1)
{printf("\n\nNO exist!please");
printf("\n\nAre you again?\n\t1).again 2).NO and back [ ]\b\b");
scanf("%d",&w1);
if(w1==2)
printf_back();
}
}
while(k==-1&&w1==1);break;
}
w4=0;w3=0;
if(k!=-1)
{printf("\n\nWhat do you want to do?\n\t 1).Search 2).Modify 3).Delete 4).Back menu [ ]\b\b");
scanf("%d",&w2);
switch(w2)
{case 2:w3=modify_data(k,n);break;
case 3:{printf("\nAre you sure?\n\t 1).Sure 2).No and back [ ]\b\b");
scanf("%d",&w4);
if(w4==1)
for(a=k;a<n;a++)
{strcpy(people[a].num,people[a+1].num);
strcpy(people[a].name,people[a+1].name);
strcpy(people[a].sex,people[a+1].sex);
strcpy(people[a].age,people[a+1].age);
strcpy(people[a].xueli,people[a+1].xueli);
strcpy(people[a].gong,people[a+1].gong);
strcpy(people[a].address,people[a+1].address);
strcpy(people[a].telephone,people[a+1].telephone);
}
break;
}
}
if(w3==1||w4==1)
{save(n);
printf("\n\nSuccessful.^_^.");
printf("\n\nWhant do you want to do? \n\t 1).Search another 2).Back [ ]\b\b" );
scanf("%d",&w2);
}
}
}
while(w2==1);
menu();
}
modify()
{struct people p;
FILE *fp;
int i,n,k,w0=1,w1,w2=0;
n=load();
do
{
k=-1;
printf_face();
for(i=0;i<n;i++)
{if((i!=0)&&(i%10==0))
{printf("\n\nRemember NO.which needed modify.pass any key to contiune ...");
getch();
puts("\n\n");
}
printf_one(i);
}
do
{printf("\n\nEnter NO.that you want to modify! NO.:");
scanf("%s",p.num);
for(i=0;i<n;i++)
if(strcmp(p.num,people[i].num)==0)
{k=i;
p=people[i];
}
if(k==-1)printf("\n\nNO exist!please again");
}while(k==-1);
printf_face();
printf_one(k);
w1=modify_data(k,n);
if(w1==1)
{printf("\nSuccessful ^_^.\n\nAre you modify another ?\n\n\t 1).Yes 2).Back with save\t[ ]\b\b");
scanf("%d",&w0);
w2=1;
}
else
{w0=0;
if(w2==1)
people[k]=p;
}
if(w0!=1&&w2==1)
save(n);
}while(w0==1);
menu();
}
save(int n)
{FILE *fp;
int i;
if((fp=fopen("Pro.txt","wb"))==NULL)
{printf("\nCannot open file\n");
return NULL;
}
for(i=0;i<n;i++)
if(people[i].num!=0)
if(fwrite(&people[i],sizeof(struct people),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
load()
{FILE *fp;
int i;
if((fp=fopen("Pro.txt","rb"))==NULL)
{printf("\nCannot open file\n");
return NULL;
}
for(i=0;!feof(fp);i++)
fread(&people[i],sizeof(struct people),1,fp);
fclose(fp);
return(i-1);
}
input(int i)
{
no_input(i,i);
printf("num:");
scanf("%s",people[i].num);
printf("name:");
scanf("%s", people[i].name) ;
printf("sex:");
scanf("%s",people[i].sex);
printf("age:");
scanf("%s",people[i].age);
printf("xueli:");
scanf("%s",people[i].xueli);
printf("gong:");
scanf("%s",people[i].gong);
printf("address:");
scanf("%s",people[i].address);
printf("telephone:");
scanf("%s",people[i].telephone);
}
modify_data(int i)
{int c,w1;
do
{puts("\nmodify by=>\n\n 1).num 2).name 3).sex 4).ages 5).xueli 6)gong 7)address 8)telephone ");
printf("Which you needed?:[ ]\b\b");
scanf("%d",&c);
if(c>8||c<1)
{puts("\nChoice error!Please again!");
getchar();
}
}while(c>8||c<1);
do
{switch(c)
{
case 1:printf("num:");scanf("%s",people[i].num);break;
case 2:printf("name:");scanf("%s",people[i].name);break;
case 3:printf("sex:");scanf("%s",people[i].sex);break;
case 4:printf("age:");scanf("%s",people[i].age);break;
case 5:printf("xueli:");scanf("%s",people[i].xueli);break;
case 6:printf("gong:");scanf("%s",people[i].gong);break;
case 7:printf("address:");scanf("%s",people[i].address);break;
case 8:printf("telephone:");scanf("%s",people[i].telephone);break;
}
puts("\nNow:\n");
printf_face();
printf_one(i);
printf("\nAre you sure?\n\n\t 1).Sure 2).No and remodify 3).Back without save in this time [ ]\b\b");
scanf("%d",&w1);
}
while(w1==2);
return(w1);
}
no_input(int i,int n)
{int j,k,w1;
do
{w1=0;
for(j=0;people[i].num[j]!='\0';j++)
if(people[i].num[j]>'9')
{puts("Input error!Only be made up of(0-9).Please reinput!\n");
w1=1;break;
}
if(w1!=1)
for(k=0;k<n;k++)
if(k!=i&&strcmp(people[k].num,people[i].num)==0)
{puts("This record is exist.please reinput!\n");
}
}
while(w1==1);
}
printf_face()
{
printf("\nnum name sex ages xueli gong address telephone \n");
}
printf_one(int i)
{
int j;
printf("%7s%7s%7s%7s%7s%7s%10s%12s\n",people[i].num,people[i].name,people[i].sex,people[i].age,people
[i].xueli,people[i].gong,people[i].address,people[i].telephone);
}
printf_back()
{
int j,w;
printf("\n\n\tSuccessful.^_^\n\n");
printf("What do you want you to do?\n\n\t1).Browse all now\t2).Back: [ ]\b\b");
scanf("%d",&w);
if(w==1)
browse();
else menu();
}
參考資料:
㈢ C語言課程設計之人事管理
這是教師信息管理,應該能滿足你的要求/*13. teacherfun.c源程序*/
/*** teacherfun.c ***/
#include "c14_t.c" /*根據實際存放位置修改此路徑*/
/*初始化雙鏈表*/
void init()
{
First=(TEACHER *)malloc(sizeof(TEACHER)); /*為頭結點申請空間*/
Last=First; /*將尾指針指向頭結點*/
First->prior=Last; /*設置頭結點的前驅指針*/
Last->next=First; /*設置頭結點的後繼指針*/
p=First; /*設置當前記錄指針為頭結點*/
}
/*創建教師信息循環雙鏈表*/
void create()
{
int unit,flag=0;
float temp;
TEACHER *info; /*新增結點*/
init();
for(;;)
{
if(flag==1)break; /*標志為1,不再輸入*/
clrscr(); /*清屏*/
printf("Please enter teacher infomation\n");
printf("input @ end enter\n");
info=(TEACHER *)malloc(sizeof(TEACHER));/*為新增結點申請空間*/
if(!info) /*沒有空間出錯處理*/
{
printf("\nout of memory");
exit(0);
}
printf("No:"); /*開始提示輸入*/
scanf("%s",info->no);
if(info->no[0]=='@')/*輸入@結束輸入*/
{
flag=1;break;}
printf("Name:");
scanf("%s",info->name);
printf("Sex:");
scanf("%s",info->sex);
printf("Profess:");
scanf("%s",info->profess);
printf("Dept:");
scanf("%s",info->dept);
printf("Class:");
scanf("%s",info->class);
printf("Workload:");
scanf("%f",&temp);
info->workload=temp;
if(strcmp(info->profess,"prof"))unit=25; /*教授*/
if(strcmp(info->profess,"aprof"))unit=20;/*副教授*/
if(strcmp(info->profess,"lect"))unit=15;/*講師*/
if(strcmp(info->profess,"ass"))unit=10;/*助教*/
info->lessonf=unit*info->workload;/*根據職稱計算代課費*/
info->next=Last->next;/*新插入結點插在表末尾*/
info->prior=Last; /*新結點的前驅為原來的尾結點*/
Last->next=info; /*原來尾結點的後繼為新結點*/
Last=info; /*新的尾結點為新結點*/
First->prior=Last;/*頭結點的前驅為尾指針*/
}
return;
}
/*顯示第一條記錄*/
void firstr()
{
if(First==Last)return;
clear();
p=First->next;
print(p);
}
/*顯示最後一條記錄*/
void lastr()
{
if(First==Last)return;
clear();
p=Last;
print(p);
}
/*顯示前一條記錄*/
void priorr()
{
if(First==Last)
return;
if(p->prior!=First)
p=p->prior;
else
p=Last;
clear();
print(p);
}
/*顯示下一條記錄*/
void nextr()
{
if(First==Last)
return;
if(p==Last)
p=First->next;
else
p=p->next;
clear();
print(p);
}
/*從文件讀數據*/
void load()
{
TEACHER *p1;
FILE *fp;
if((fp=fopen("data.txt","rb"))==NULL)
{
printf("can not open file\n");
return;
}
while(First->next!=First) /*如果當前表不空,刪除當前表*/
{
p1=First->next;
First->next=p1->next;
free(p1);
}
free(First);
First=(TEACHER*)malloc(sizeof(TEACHER)); /*創建頭結點*/
if(!First)
{
printf("out of memory!\n");
return;
}
Last=First;
First->prior=Last;
Last->next=First;
p=First;
while(!feof(fp)) /*當文件不為空時讀數據*/
{
p1=(TEACHER*)malloc(sizeof(TEACHER));
if(!p1)
{
printf("out of memory!\n");
return;
}
if(1!=fread(p1,sizeof(TEACHER),1,fp))
break; /*讀數據*/
p1->next=Last->next; /*將新讀出的數據鏈在當前表尾*/
p1->prior=Last;
Last->next=p1;
Last=Last->next;
First->prior=Last;
}
fclose(fp); /*關閉文件*/
}
/*保存數據到磁碟文件*/
void save()
{
FILE *fp; /*定義指向文件的指針*/
TEACHER *p1; /* 定義移動指針*/
if((fp=fopen("data.txt","wb"))==NULL) /*為輸出打開一個文本文件,如沒有則建立*/
{
printf("can not open file\n"); /*如不能打開文件,顯示提示信息,結束程序*/
return; /*返回*/
}
p1=First; /*移動指針從頭指針開始*/
while(p1->next!=First) /*如p1不為空*/
{
fwrite(p1->next,sizeof(TEACHER),1,fp); /*寫入一條記錄*/
p1=p1->next; /*指針後移,處理下一條記錄*/
}
fclose(fp); /*關閉文件*/
}
/*刪除記錄*/
void delete()
{
TEACHER *p1;
if(First==Last)
return;/*表為空*/
if(p==First) /*p為頭結點*/
p=First->next;
if(p==Last)/*p為尾結點*/
Last=p->prior;
p1=p; /*一般情況*/
p=p->next;
p1->prior->next=p1->next;
p1->next->prior=p1->prior;
free(p1);
}
/*輸出記錄*/
void print(TEACHER *p)
{
int x1=70,y1=100;
char str[20];
outtextxy(x1+110,y1+75, p->no);
outtextxy(x1+360,y1+75,p->name);
outtextxy(x1+110,y1+105,p->sex);
outtextxy(x1+360,y1+105,p->profess);
outtextxy(x1+110,y1+135,p->dept);
outtextxy(x1+360,y1+135,p->class);
sprintf(str,"%f",p->workload);
outtextxy(x1+110,y1+165,str);
sprintf(str,"%f",p->lessonf);
outtextxy(x1+360,y1+165,str);
}
/*****清除界面顯示信息******/
void clear()
{
int x1=70,y1=100,m,n;
for(m=0;m<4;m++)
for(n=0;n<2;n++)
{
setfillstyle(1,WHITE);/*白色覆蓋原有信息*/
bar(x1+n*250+100,y1+50+m*30+20,x1+n*250+200,y1+50+m*30+40);
}
}
/*sort排序函數*/
void sort()
{
TEACHER *p0,*p00,*p1,*p11,*templast;
if(First->next==First||First->next->next==First)return;
p00=First; /*作排好序表的表頭和第一個結點*/
p0=First->next;
p1=p0->next;
First->prior=p0;
p0->next=First;
templast=p0;
while(p1!=First) /*當p1沒有轉回到表頭時*/
{
p11=p1; /*將p11作為待插入結點*/
p1=p1->next; /*p1指向下一個待排序結點*/
p00=First; /*從頭結點開始尋找插入位置*/
p0=p00->next; /*p0是p00的後繼*/
while(p0!=First&&p11->workload>p0->workload)
{
p00=p0;/*當新插入結點比當前表結點大時,指針後移*/
p0=p0->next;
}
if( p0==First)/*如果p0移到了頭結點*/
{
p11->next=p00->next;
p11->prior=p00;
p00->next=p11;
p0->prior=p11;
templast=p11;
}
else /*新插入結點介於p00和p0之間*/
{
p11->next=p0;
p11->prior=p00;
p0->prior=p11;
p00->next=p11;
}
}
Last=templast; /*設置尾指針*/
p=First; /*設置當前記錄指針*/
}
㈣ C語言課程設計:C職工管理表
這個基本能夠滿足要求,但是如果要盡善盡美的話,還需要一點細節上的增改。
#include "string.h"
#include "stdio.h"
#define N 30
int n=0;
/* 職工信息數據結構 */
struct Staff
{
char Snum[20]; //職工號
char Sname[20]; //職工名
char Ssex[6]; //性別
char Sage[3]; //年齡
char Swork[20]; //職務
char Shonor[20]; //職稱
char Sworkdate[30]; //參加工作時間
char Sdepart[10]; //職工所在單位
}Sta[N];
/* 錄入函數實現 */
void ReadData()
{
if(n<=N)
{
printf("請輸入職工信息:\n職工號:");
scanf("%s",Sta[n].Snum);
printf("職工名:");
scanf("%s",Sta[n].Sname);
printf("性別:");
scanf("%s",Sta[n].Sage);
printf("職務:");
scanf("%s",Sta[n].Swork);
printf("職稱:");
scanf("%s",Sta[n].Shonor);
printf("入工時間:");
scanf("%s",Sta[n].Sworkdate);
printf("所在單位:");
scanf("%s",Sta[n].Sdepart);
n++;
}
else printf("\n錄入已滿!");
}
/* 顯示函數實現 */
void ShowData()
{
printf("-------------------------------------------\n");
for(int i=0;i<n;i++)
{
printf("----工號:%s 姓名:%s 年齡:%s \n\n",Sta[i].Snum,Sta[i].Sname,Sta[i].Sage);
printf("性別:%s 職務:%s 職稱:%s \n\n",Sta[i].Ssex,Sta[i].Swork,Sta[i].Shonor);
printf("入工年月:%s 所在單位:%s ",Sta[i].Sworkdate,Sta[i].Sdepart);
}
printf("\n-------------------------------------------");
}
/* 查找函數實現 */
void FindData()
{
char Stanumber1[20];
printf("請輸入姓名:");
scanf("%s",Stanumber1);
printf("\n");
for(int i=0;i<n;i++)
if(strcmp(Sta[i].Sname,Stanumber1)==0)
{
printf("工號:%s 姓名:%s 年齡:%s \n\n",Sta[i].Snum,Sta[i].Sname,Sta[i].Sage);
printf("性別:%s 職務:%s 職稱:%s \n\n",Sta[i].Ssex,Sta[i].Swork,Sta[i].Shonor);
printf("入工年月:%s 所在單位:%s \n",Sta[i].Sworkdate,Sta[i].Sdepart);
}
}
/* 刪除函數實現 */
void DeleData()
{
char Snumber[20];
printf("請輸入職工號:");
scanf("%s",Snumber);
printf("\n");
for(int i=0;i<n;i++)
if(strcmp(Sta[i].Snum,Snumber)==0)
{
for(;i<n-1;i++)
Sta[i]=Sta[i+1];
n--;
}
}
/* 入口函數實現 */
void main()
{
int option;
option=6;
printf("\n 職工信息管理系統 \n");
while(option!=5)
{
if(option!=5)
{
printf("\n\n 1.錄入 2.顯示 3.查找\n");
printf(" 4.刪除 5.退出 請選擇:");
scanf("%d",&option);
printf("\n");
switch(option)
{
case 1: ReadData();break;
case 2: ShowData();break;
case 3: FindData();break;
case 4: DeleData();break;
default: printf("數據輸入有誤!\n");break;
}//switch
}//if
}//while
}
㈤ C/C++程序設計課程設計員工管理系統
/////////////////////////////////////////////////////////////////////
///////////// List.h: 類的所有成員都在頭文件里聲明 //////////////////
/////////////////////////////////////////////////////////////////////
#include <iostream.h> // cin 及 cout
#include <malloc.h> // 用到申請內存函數 malloc() 和釋放內存函數 free()
#include <string.h> // 字元串處理
#include <stdio.h> // 文件操作(讀文件)
#include <stdlib.h> // system("cls")
struct address /*家庭地址*/
{
char city[10]; /*城市*/
char town[10]; /*縣城*/
char village[10]; /*鄉鎮*/
};
struct telephone /*聯系方式*/
{
char SJ[50]; /*手機*/
char JD[30]; /*家庭電話*/
char XD[30]; /*學校電話*/
};
struct person /*個人信息*/
{
char name[20]; /*名字*/
char sex[10] ; /*性別*/
char MZ[16]; /*民族*/
char GJ[17]; /*國籍*/
char XL[19]; /*學歷*/
};
struct score //成績
{
char num[20]; //學號
char english[20];
char chinese[20];
char math[20];
char physics[20];
};
typedef struct linknode //定義節點的類型
{
char address[100]; //地址
char birthday[100]; //出生日期
struct score sc; //成績
struct person pe; //個人信息
struct telephone te; //聯系方式
bool flag;
struct linknode* next;
}nodetype;
class List
{
nodetype* head;
public:
List();
List::~List();
linknode* creatlist(int); //創建鏈表
int listlen(); //返回鏈表長度
nodetype* findnode(int); //通過查找序號返回節點的指針
nodetype* find(char c[]); //通過查找姓名返回節點的指針
int find2(char c[]); //通過查找姓名返回節點的序號
nodetype* insnode(int); //插入節點
void delnode(int); //刪除節點
nodetype* load(); //初始化:從外部讀入數據
void readstr(FILE *f,char *string); //讀行函數
bool check(char *a, char *b); //對比兩個字元串是否相等
void help(); //顯示幫助菜單
void editperson(nodetype*); //編輯個人說明
void editscore(nodetype*); //編輯學科成績
void edittelephone(nodetype*); //編輯聯系方式
void dispname(); //顯示所有學生姓名
void dispnode(nodetype* p); //顯示一個學生的所有信息
void dispperson(nodetype*); //顯示一個學生的個人說明
void dispscore(nodetype*); //顯示一個學生的學科成績
void disptelephone(nodetype*); //顯示一個學生的聯系方式
};
class Operater
{
List L1;
public:
void Loop(); //主循環
void display(); //顯示菜單
};
List::List()
{
head = NULL;
}
bool List::check(char *a, char *b) //對比兩個字元串是否相等
{
int i;
int j=strlen(b);
for(i=0; i<j; i++)
{
if(*a==*b)
{
a++;
b++;
}
else
return 0;
}
return 1;
}
nodetype* List::creatlist (int n) //創建鏈表
{
nodetype *h=NULL, *s, *t;
int i=1;
for(int j=0; j<n; j++)
{
if(i==1) //創建第一個節點
{
h=(nodetype*)malloc(sizeof(nodetype));
h->next=NULL;
t=h;
}
else //創建其餘節點
{
s=(nodetype*)malloc(sizeof(nodetype));
s->next=NULL;
t->next=s;
t=s; //t 始終指向生成的單鏈表的最後一個節點
}
i++;
}
head=h;
return h;
}
/*
nodetype* List::creatlist (int n) //創建鏈表
{
nodetype *h=NULL;
int i=1;
for(int j=0; j<n; j++)
{
h=insnode(0);
}
head=h;
return h;
}
*/
void List::readstr(FILE *f,char *string)
{
do
{
//①: 先讀入一行文本
fgets(string, 255, f); //fgets(): 從文件 f 讀入長度為 255-1 的字元串
// 並存入到 string 中
} while ((string[0] == '/') || (string[0] == '\n'));
return;
}
nodetype* List::load()
{
FILE *fp;
nodetype *p;
char c[255];
int num;
if((fp=fopen("student.txt", "r"))==NULL)
{
cout<<"打開文件失敗"<<endl;
return 0;
}
readstr(fp, c);
sscanf(c, "The Length Of Link: %d", &num); //獲取鏈表長度
p=creatlist(num); //創建鏈表
for(int i=0; i<num; i++)
{
readstr(fp, c);
strcpy(p->address, c);
readstr(fp, c);
strcpy(p->birthday, c);
readstr(fp, c);
strcpy(p->sc.num, c);
readstr(fp, c);
strcpy(p->sc.chinese, c);
readstr(fp, c);
strcpy(p->sc.english, c);
readstr(fp, c);
strcpy(p->sc.math, c);
readstr(fp, c);
strcpy(p->sc.physics, c);
readstr(fp, c);
strcpy(p->pe.name, c);
readstr(fp, c);
strcpy(p->pe.sex, c);
readstr(fp, c);
strcpy(p->pe.GJ, c);
readstr(fp, c);
strcpy(p->pe.MZ, c);
readstr(fp, c);
strcpy(p->pe.XL, c);
readstr(fp, c);
strcpy(p->te.SJ, c);
readstr(fp, c);
strcpy(p->te.JD, c);
readstr(fp, c);
strcpy(p->te.XD, c);
p=p->next;
}
fclose(fp);
return p;
}
void List::dispnode(nodetype* p) //顯示一個學生的所有信息
{
if(p!=NULL)
{
dispperson(p);
dispscore(p);
disptelephone(p);
}
}
void List::dispname() //顯示所有學生姓名
{
nodetype* p=head;
cout<<"現有的學生: "<<endl;
if(p==NULL)
cout<<"沒有任何學生數據"<<endl;
while(p!=NULL)
{
cout<<"姓名: "<<p->pe.name;
p=p->next;
}
}
int List::listlen() //返回鏈表長度
{
int i=0;
nodetype* p=head;
while(p!=NULL)
{
p=p->next;
i++;
}
return i;
}
nodetype* List::findnode (int i) //通過查找序號返回節點的指針
{
nodetype* p=head;
int j=1;
if( i>listlen()||i<=0 ) // i 上溢或下溢
return NULL;
else
{
while( p!=NULL && j<i ) //查找第 i 個節點並由 p 指向該節點
{
j++;
p=p->next;
}
return p;
}
}
nodetype* List::find(char c[]) //通過查找姓名返回節點的指針
{
nodetype* p=head;
int j=1;
strcat(c, "\n"); //從外部讀入的字元串末尾都帶了一個換行符
while( p!=NULL && !(check(c, p->pe.name))) //查找第 i 個節點並由 p 指向該節點
{
j++;
p=p->next;
}
return p;
}
int List::find2(char c[]) //通過查找姓名返回節點的序號
{
nodetype* p=head;
int j=1;
strcat(c, "\n"); //從外部讀入的字元串末尾都帶了一個換行符
while( p!=NULL && !(check(c, p->pe.name))) //查找第 i 個節點並由 p 指向該節點
{
j++;
p=p->next;
}
return j;
}
nodetype* List::insnode(int i)
{
nodetype *h=head, *p, *s;
s=(nodetype*)malloc(sizeof(nodetype)); //創建節點 s
s->next=NULL;
if(i==0) //i=0 時 s 作為該單鏈表的第一個節點
{
s->next = h;
h=s; //重新定義頭節點
}
else
{
p=findnode(i); //查找第 i 個節點,並由 p 指向該節點
if(p!=NULL)
{
s->next=p->next;
p->next=s;
}
else cout<<"輸入的 i 值不正確"<<endl;
}
head=h;
return s;
}
void List::delnode(int i) //刪除第 i 個節點
{
nodetype *h=head, *p=head, *s;
int j=1;
if(i==1) //刪除第一個節點
{
h=h->next;
free(p);
}
else
{
p=findnode(i-1); //查找第 i-1 個節點,並由 p 指向這個節點
if(p!=NULL && p->next!=NULL)
{
s=p->next; // s 指向要刪除的節點
p->next=s->next;
free(s);
}
else
cout<<"輸入的 i 值不正確"<<endl;
}
head=h;
}
void List::editperson(nodetype* p)
{
char c[100];
cout<<"請輸入姓名: "<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->pe.name, c);
cout<<"請輸入性別:"<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->pe.sex, c);
cout<<"請輸入生日(格式舉例:1982-1-1): "<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->birthday, c);
cout<<"請輸入民族:"<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->pe.MZ, c);
cout<<"請輸入國籍:"<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->pe.GJ, c);
cout<<"請輸入學歷:"<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->pe.XL, c);
cout<<"請輸入家庭住址(例如:廣西玉林市解放路11號"<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->address, c);
cout<<"編輯個人信息完成!"<<endl;
dispperson(p);
}
void List::editscore(nodetype* p)
{
char a[50];
cout<<"請輸入學號: "<<endl;
cin>>a;
strcat(a, "\n");
strcpy(p->sc.num, a);
cout<<"請輸入大學語文成績: "<<endl;
cin>>a;
strcat(a, "\n");
strcpy(p->sc.chinese, a);
cout<<"請輸入英語成績: "<<endl;
cin>>a;
strcat(a, "\n");
strcpy(p->sc.english, a);
cout<<"請輸入數學成績: "<<endl;
cin>>a;
strcat(a, "\n");
strcpy(p->sc.math, a);
cout<<"請輸入物理成績: "<<endl;
cin>>a;
strcat(a, "\n");
strcpy(p->sc.physics, a);
cout<<"編輯學科成績完成!"<<endl;
dispscore(p);
}
void List::edittelephone(nodetype* p)
{
char c[50];
cout<<"請輸入手機號碼: "<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->te.SJ, c);
cout<<"請輸入家庭電話號碼: "<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->te.JD, c);
cout<<"請輸入學校電話號碼: "<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->te.XD, c);
cout<<"編輯聯系方式完成!"<<endl;
disptelephone(p);
}
void List::dispperson(nodetype* p)
{
cout<<"姓名: "<<p->pe.name;
cout<<"性別: "<<p->pe.sex;
cout<<"民族: "<<p->pe.MZ;
cout<<"國籍: "<<p->pe.GJ;
cout<<"學歷: "<<p->pe.XL;
cout<<"出生日期: "<<p->birthday;
cout<<"家庭住址: "<<p->address;
}
void List::dispscore(nodetype* p)
{
cout<<"學號: "<<p->sc.num;
cout<<"大學語文成績: "<<p->sc.chinese;
cout<<"英語成績: "<<p->sc.english;
cout<<"數學成績: "<<p->sc.math;
cout<<"物理成績: "<<p->sc.physics;
}
void List::disptelephone(nodetype* p)
{
cout<<"手機號碼是: "<<p->te.SJ;
cout<<"家庭電話是: "<<p->te.JD;
cout<<"學校電話是: "<<p->te.XD;
}
void List::help()
{
cout<<endl<<endl;
cout<<"*********************************************************"<<endl;
cout<<"1: 編輯個人信息"<<endl;
cout<<"2: 編輯學科成績"<<endl;
cout<<"3: 編輯聯系方式"<<endl;
cout<<"4: 顯示個人信息"<<endl;
cout<<"5: 顯示學科成績"<<endl;
cout<<"6: 顯示聯系方式"<<endl;
cout<<"7: 顯示該學生所有信息"<<endl;
cout<<"8: 幫助菜單"<<endl;
cout<<"9: 返回上一級菜單"<<endl;
cout<<"*********************************************************"<<endl;
}
List::~List()
{
nodetype *pa=head, *pb;
if(pa!=NULL)
{
pb=pa->next;
if(pb==NULL)
free(pa);
else
{
while(pb!=NULL)
{
free(pa);
pa=pb;
pb=pb->next;
}
free(pa);
}
}
}
void Operater::display()
{
cout<<endl<<endl;
cout<<"**************************** 學生管理系統 **************************"<<endl;
cout<<"1: 添加一個學生信息"<<endl;
cout<<"2: 刪除一個學生信息"<<endl;
cout<<"3: 顯示所有學生的姓名"<<endl;
cout<<"4: 根據姓名顯示單個學生所有信息"<<endl;
cout<<"5: 根據姓名對單個學生進行編輯"<<endl;
cout<<"6: 幫助菜單"<<endl;
cout<<"7: 保存數據"<<endl;
cout<<"0: 退出系統"<<endl;
cout<<"********************************************************************"<<endl;
}
void Operater::Loop()
{
List L1; //List 對象
char ch[20];
nodetype *p, *head;
int i; //存放節點序號
p=L1.load(); //初始化:從外部讀入數據創建鏈表
head=p;
display();
while(1)
{
cout<<endl<<endl;
cout<<"請輸入選擇(幫助選項--> 6 ): "<<endl;
cin>>ch;
system("cls");
if(L1.check(ch, "1"))
{
p=L1.insnode(0);
head=p;
system("cls");
cout<<endl;
cout<<"************** 添加一個學生信息 ******************"<<endl;
cout<<"下面輸入個人信息: "<<endl;
L1.editperson(p);
cout<<"下面輸入學科成績: "<<endl;
L1.editscore(p);
cout<<"下面輸入聯系方式: "<<endl;
L1.edittelephone(p);
}
if(L1.check(ch, "2"))
{
system("cls");
cout<<endl;
cout<<"************** 刪除一個學生信息 ******************"<<endl;
L1.dispname();
cout<<"請輸入學生姓名: "<<endl;
cin>>ch;
i=L1.find2(ch);
L1.delnode(i);
}
if(L1.check(ch, "3"))
{
system("cls");
cout<<endl;
cout<<"************** 顯示所有學生姓名 ******************"<<endl;
L1.dispname();
}
if(L1.check(ch, "4"))
{
system("cls");
cout<<endl;
cout<<"************** 根據姓名顯示單個學生所有信息 ******************"<<endl;
L1.dispname();
cout<<"請輸入學生姓名: "<<endl;
cin>>ch;
p=L1.find(ch);
L1.dispnode(p);
}
if(L1.check(ch, "6"))
{
display();
}
if(L1.check(ch, "7")) //保存數據
{
FILE *fp;
if((fp=fopen("student.txt", "w"))==NULL)
{
cout<<"打開文件失敗"<<endl;
return;
}
int i;
char t[255];
//將 L1.listlen() 賦予字元串中的數字
sprintf(t, "The Length Of Link: %d\n", L1.listlen());
fputs(t, fp);
strcpy(t, "\n");
fputs(t, fp);
p=L1.findnode(1); //將鏈表頭指針賦予 p
for(i=0; i<L1.listlen(); i++)
{
fputs(p->address, fp); //輸出地址
fputs(p->birthday, fp); //輸出生日
fputs(p->sc.num, fp); //輸出學號
fputs(p->sc.chinese, fp); //輸出語文成績
fputs(p->sc.english, fp); //輸出英語成績
fputs(p->sc.math, fp); //輸出數學成績
fputs(p->sc.physics, fp); //輸出物理成績
fputs(p->pe.name, fp); //輸出姓名
fputs(p->pe.sex, fp); //輸出性別
fputs(p->pe.GJ, fp); //輸出國籍
fputs(p->pe.MZ, fp); //輸出民族
fputs(p->pe.XL, fp); //輸出學歷
fputs(p->te.SJ, fp); //輸出手機
fputs(p->te.JD, fp); //輸出家庭電話
fputs(p->te.XD, fp); //輸出學校電話
fputs(t, fp);
p=p->next;
}
p=head;
fclose(fp);
}
if(L1.check(ch, "5"))
{
char c[20];
system("cls");
cout<<endl;
cout<<"************** 根據姓名對單個學生進行編輯 ******************"<<endl;
L1.dispname();
cout<<"請輸入學生姓名: "<<endl;
cin>>c;
p=L1.find(c);
system("cls");
cout<<endl<<endl;
cout<<"*********************************************************"<<endl;
cout<<"1: 編輯個人信息"<<endl;
cout<<"2: 編輯學科成績"<<endl;
cout<<"3: 編輯聯系方式"<<endl;
cout<<"4: 顯示個人信息"<<endl;
cout<<"5: 顯示學科成績"<<endl;
cout<<"6: 顯示聯系方式"<<endl;
cout<<"7: 顯示該學生所有信息"<<endl;
cout<<"8: 幫助菜單"<<endl;
cout<<"9: 返回上一級菜單"<<endl;
cout<<"*********************************************************"<<endl;
while(1)
{
cout<<endl<<endl;
cout<<"請輸入選擇(幫助選項--> 8 ): "<<endl;
cin>>c;
system("cls");
if(L1.check(c, "1"))
{
system("cls");
cout<<endl;
cout<<"************** 編輯個人信息 ******************"<<endl;
L1.editperson(p);
}
else if(L1.check(c, "2"))
{
system("cls");
cout<<endl;
cout<<"************** 編輯學科成績 ******************"<<endl;
L1.editscore(p);
}
else if(L1.check(c, "3"))
{
system("cls");
cout<<endl;
cout<<"************** 編輯聯系方式 ******************"<<endl;
L1.edittelephone(p);
}
else if(L1.check(c, "4"))
{
system("cls");
cout<<endl;
cout<<"************** 顯示個人信息 ******************"<<endl;
L1.dispperson(p);
}
else if(L1.check(c, "5"))
{
system("cls");
cout<<endl;
cout<<"************** 顯示學科成績 ******************"<<endl;
L1.dispscore(p);
}
else if(L1.check(c, "6"))
{
system("cls");
cout<<endl;
cout<<"************** 顯示聯系方式 ******************"<<endl;
L1.disptelephone(p);
}
else if(L1.check(c, "7"))
{
system("cls");
L1.dispnode(p);
}
else if(L1.check(c, "8"))
{
system("cls");
L1.help();
}
else if(L1.check(c, "9"))
{
display();
break; //用 break 跳出本循環,不要用 return ,return 是退出程序
}
}
}
else if(L1.check(ch, "0"))
return;
}
return;
}
void main()
{
Operater O1;
O1.Loop();
}
自己看看吧,改改就好了,我也不太會
㈥ C語言課程設計之公司員工信息管理系統怎麼做
1、員工信息管理系統是事業單位科學、全面、高效進行人事管理的系統,參考大量中國人力資源管理理論,根植於國內管理的實際情況,實用而科學。內容包括機構的建立和維護,人員信息的錄入和輸出,工資的調整和發放以及各類報表的繪制和輸出等功能。在操作上集輸入、維護、查詢、統計、列印、輸出等處理為一體,簡便靈活,自動化功能強大。
2、常式:
#include<stdio.h>
#include<windows.h>
#include<time.h>
#include<string.h>
#defineN100
structemployee
{
intnum;
charname[10];
charsex;
intage;
charxueli[30];
intwage;
charaddr[30];
longinttel;
}em[100];/*定義一個結構體*/
voidmenu();
voidinput();
voidsave(int);
voiddisplay();
voiddel();
voidadd();
voidsearch();
voidsearch_num();
voidsearch_xueli();
voidsearch_tel();
voidmodify();/*定義各函數*/
voidmenu()/*菜單函數*/
{
printf("☆☆☆計算機科學與技術學系☆☆☆ ");
printf(" ");
printf("∮08802班關麗霞∮ ");
printf(" ");
printf("******************職工信息管理**************** ");
printf("1.錄入職工信息");
printf("2.瀏覽職工信息 ");
printf("3.查詢職工信息");
printf("4.刪除職工信息 ");
printf("5.添加職工信息");
printf("6.修改職工信息 ");
printf("7.退出 ");
printf("********************謝謝使用****************** ");
printf(" ");
printf(" ");
}
voidmain()
{
menu();/*調用菜單函數*/
intn,flag;
chara;
do
{
printf("請選擇你需要操作的步驟(1--7): ");
scanf("%d",&n);
if(n>=1&&n<=7)
{
flag=1;
break;
}
else
{
flag=0;
printf("您輸入有誤,請重新選擇!");
}
}
while(flag==0);
while(flag==1)
{
switch(n)
{
case1:printf("◆◆◆輸入職工信息◆◆◆ ");printf(" ");input();break;
case2:printf("◆◆◆瀏覽職工信息◆◆◆ ");printf(" ");display();break;
case3:printf("◆◆◆按職工號查詢職工信息◆◆◆ ");printf(" ");search();break;
case4:printf("◆◆◆刪除職工信息◆◆◆ ");printf(" ");del();break;
case5:printf("◆◆◆添加職工信息◆◆◆ ");printf(" ");add();break;
case6:printf("◆◆◆修改職工信息◆◆◆ ");printf(" ");modify();break;
case7:exit(0);break;
default:break;
}
getchar();
printf(" ");
printf("是否繼續進行(yorn): ");
scanf("%c",&a);
if(a=='y')
{
flag=1;
system("cls");/*清屏*/
menu();/*調用菜單函數*/
printf("請再次選擇你需要操作的步驟(1--6): ");
scanf("%d",&n);
printf(" ");
}
else
exit(0);
}
}
voidinput()/*錄入函數*/
{
inti,m;
printf("請輸入需要創建信息的職工人數(1--100): ");
scanf("%d",&m);
for(i=0;i<m;i++)
{
printf("職工號:");
srand((int)time(0));
em[i].num=rand()%10000+20000000;
if(em[i].num!=em[i-1].num)
printf("%8d",em[i].num);
printf(" ");
printf("請輸入姓名:");
scanf("%s",em[i].name);
getchar();
printf("請輸入性別(f--女m--男):");
scanf("%c",&em[i].sex);
printf("請輸入年齡:");
scanf("%d",&em[i].age);
printf("請輸入學歷:");
scanf("%s",em[i].xueli);
printf("請輸入工資:");
scanf("%d",&em[i].wage);
printf("請輸入住址:");
scanf("%s",em[i].addr);
printf("請輸入電話:");
scanf("%d",&em[i].tel);
printf(" ");
}
printf(" 創建完畢! ");
save(m);
}
voidsave(intm)/*保存文件函數*/
{
inti;
FILE*fp;
if((fp=fopen("employee_list","wb"))==NULL)/*創建文件並判斷是否能打開*/
{
printf("cannotopenfile ");
exit(0);
}
for(i=0;i<m;i++)/*將內存中職工的信息輸出到磁碟文件中去*/
if(fwrite(&em[i],sizeof(structemployee),1,fp)!=1)
printf("filewriteerror ");
fclose(fp);
}
intload()/*導入函數*/
{
FILE*fp;
inti=0;
if((fp=fopen("employee_list","rb"))==NULL)
{
printf("cannotopenfile ");
exit(0);
}
else
{
do
{
fread(&em[i],sizeof(structemployee),1,fp);
i++;
}
while(feof(fp)==0);
}
fclose(fp);
return(i-1);
}
voiddisplay()/*瀏覽函數*/
{
inti;
intm=load();
printf(" 職工號 姓名 性別 年齡 學歷 工資 住址 電話 ");
for(i=0;i<m;i++)/*m為輸入部分的職工人數*/
printf(" %d %s %c %d %s %d %s %ld ",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
}
voiddel()/*刪除函數*/
{
intm=load();
inti,j,n,t,flag;
charname[20];
printf(" 原來的職工信息: ");
display();/*調用瀏覽函數*/
printf(" ");
printf("請輸入要刪除的職工的姓名: ");
scanf("%s",name);
for(flag=1,i=0;flag&&i<m;i++)
{
if(strcmp(em[i].name,name)==0)
{
printf(" 已找到此人,原始記錄為: ");
printf(" 職工號 姓名 性別 年齡 學歷 工資 住址 電話 ");
printf(" %d %s %c %d %s %d %s %ld ",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
printf(" 確實要刪除此人信息請按1,不刪除請按0 ");
scanf("%d",&n);
if(n==1)/*如果刪除,則其他的信息都往上移一行*/
{
for(j=i;j<m-1;j++)
{
strcpy(em[j].name,em[j+1].name);
em[j].num=em[j+1].num;
em[j].sex=em[j+1].sex;
em[j].age=em[j+1].age;
strcpy(em[j].xueli,em[j+1].xueli);
em[j].wage=em[j+1].wage;
strcpy(em[j].addr,em[j+1].addr);
em[j].tel=em[j+1].tel;
}
flag=0;
}
}
}
if(!flag)
m=m-1;
else
printf(" 對不起,查無此人! ");
printf(" 瀏覽刪除後的所有職工信息: ");
save(m);/*調用保存函數*/
display();/*調用瀏覽函數*/
printf(" 繼續刪除請按1,不再刪除請按0 ");
scanf("%d",&t);
switch(t)
{
case1:del();break;
case0:break;
default:break;
}
}
voidadd()/*添加函數*/
{
FILE*fp;
intn;
intcount=0;
inti;
intm=load();
printf(" 原來的職工信息: ");
display();/*調用瀏覽函數*/
printf(" ");
fp=fopen("emploee_list","a");
printf("請輸入想增加的職工數: ");
scanf("%d",&n);
for(i=m;i<(m+n);i++)
{
printf(" 請輸入新增加職工的信息: ");
printf("請輸入職工號:");
srand((int)time(0));
em[i].num=rand()%10000+20000000;
if(em[i].num!=em[i-1].num)
printf("%8d",em[i].num);
printf(" ");
printf("請輸入姓名:");
scanf("%s",em[i].name);
getchar();
printf("請輸入性別(f--女m--男):");
scanf("%c",&em[i].sex);
printf("請輸入年齡:");
scanf("%d",&em[i].age);
printf("請輸入學歷:");
scanf("%s",em[i].xueli);
printf("請輸入工資:");
scanf("%d",&em[i].wage);
printf("請輸入住址:");
scanf("%s",em[i].addr);
printf("請輸入電話:");
scanf("%d",&em[i].tel);
printf(" ");
count=count+1;
printf("已增加的人數: ");
printf("%d ",count);
}
printf(" 添加完畢! ");
m=m+count;
printf(" 瀏覽增加後的所有職工信息: ");
printf(" ");
save(m);
display();
fclose(fp);
}
voidsearch()/*查詢函數*/
{
intt,flag;
do
{
printf(" 按職工號查詢請按1;按學歷查詢請按2;按電話號碼查詢請按3,進入主函數按4 ");
scanf("%d",&t);
if(t>=1&&t<=4)
{
flag=1;
break;
}
else
{
flag=0;
printf("您輸入有誤,請重新選擇!");
}
}
while(flag==0);
while(flag==1)
{
switch(t)
{
case1:printf("按職工號查詢 ");search_num();break;
case2:printf("按學歷查詢 ");search_xueli();break;
case3:printf("按電話號碼查詢 ");search_tel();break;
case4:main();break;
default:break;
}
}
}
voidsearch_num()
{
intnum;
inti,t;
intm=load();
printf("請輸入要查找的職工號(20001111---20009999): ");
scanf("%d",&num);
for(i=0;i<m;i++)
if(num==em[i].num)
{
printf(" 已找到此人,其記錄為: ");
printf(" 職工號 姓名 性別 年齡 學歷 工資 住址 電話 ");
printf(" %d %s %c %d %s %d %s %ld ",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
break;
}
if(i==m)
printf(" 對不起,查無此人 ");
printf(" ");
printf("返回查詢函數請按1,繼續查詢職工號請按2 ");
scanf("%d",&t);
switch(t)
{
case1:search();break;
case2:break;
default:break;
}
}
voidsearch_xueli()
{
charxueli[30];
inti,t;
intm=load();
printf("請輸入要查找的學歷: ");
scanf("%s",xueli);
for(i=0;i<m;i++)
if(strcmp(em[i].xueli,xueli)==0)
{
printf(" 已找到,其記錄為: ");
printf(" 職工號 姓名 性別 年齡 學歷 工資 住址 電話 ");
printf(" %d %s %c %d %s %d %s %ld ",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
}
if(i==m)
printf(" 對不起,查無此人 ");
printf(" ");
printf("返回查詢函數請按1,繼續查詢學歷請按2 ");
scanf("%d",&t);
switch(t)
{
case1:search();break;
case2:break;
default:break;
}
}
voidsearch_tel()
{
longinttel;
inti,t;
intm=load();
printf("請輸入要查找的電話號碼: ");
scanf("%ld",&tel);
for(i=0;i<m;i++)
if(tel==em[i].tel)
{
printf(" 已找到此人,其記錄為: ");
printf(" 職工號 姓名 性別 年齡 學歷 工資 住址 電話 ");
printf(" %d %s %c %d %s %d %s %ld ",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
break;
}
if(i==m)
printf(" 對不起,查無此人 ");
printf(" ");
printf("返回查詢函數請按1,繼續查詢電話號碼請按2 ");
scanf("%d",&t);
switch(t)
{
case1:search();break;
case2:break;
default:break;
}
}
㈦ c語言的高校人事管理 課程設計
#include "stdio.h" /*I/O函數*/
#include "stdlib.h" /*其它說明*/
#include "string.h" /*字元串函數*/
#include "conio.h" /*屏幕操作函數*/
#include "mem.h" /*內存操作函數*/
#include "ctype.h" /*字元操作函數*/
#include "alloc.h" /*動態地址分配函數*/
#define N 3 /*定義常數*/
typedef struct z1 /*定義數據結構*/
{
char no[11];
char name[15];
int score[N];
float sum;
float average;
int order;
struct z1 *next;
}STUDENT;
/*以下是函數原型*/
STUDENT *init(); /*初始化函數*/
STUDENT *create(); /*創建鏈表*/
STUDENT *delete(STUDENT *h); /*刪除記錄*/
void print(STUDENT *h); /* 顯示所有記錄*/
void search(STUDENT *h); /*查找*/
void save(STUDENT *h); /*保存*/
STUDENT *load(); /*讀入記錄*/
void computer(STUDENT *h); /*計算總分和均分*/
STUDENT *insert(STUDENT *h); /*插入記錄*/
void append(); /*追加記錄*/
void (); /*復制文件*/
STUDENT *sort(STUDENT *h); /*排序*/
STUDENT *index(STUDENT *h); /*索引*/
void total(STUDENT *h); /*分類合計*/
int menu_select(); /*菜單函數*/
/******主函數開始*******/
main()
{
int i;
STUDENT *head; /*鏈表定義頭指針*/
head=init(); /*初始化鏈表*/
clrscr(); /*清屏*/
for(;;) /*無限循環*/
{
switch(menu_select()) /*調用主菜單函數,返回值整數作開關語句的條件*/
{ /*值不同,執行的函數不同,break 不能省略*/
case 0:head=init();break; /*執行初始化*/
case 1:head=create();break; /*創建鏈表*/
case 2:head=delete(head);break; /*刪除記錄*/
case 3:print(head);break; /*顯示全部記錄*/
case 4:search(head);break; /*查找記錄*/
case 5:save(head);break; /*保存文件*/
case 6:head=load(); break; /*讀文件*/
case 7:computer(head);break; /*計算總分和均分*/
case 8:head=insert(head); break; /*插入記錄*/
case 9:();break; /*復制文件*/
case 10:head=sort(head);break; /*排序*/
case 11:append();break; /*追加記錄*/
case 12:head=index(head);break; /*索引*/
case 13:total(head);break; /*分類合計*/
case 14:exit(0); /*如菜單返回值為14程序結束*/
}
}
}
/*菜單函數,返回值為整數*/
menu_select()
{
char *menu[]={"***************MENU***************", /*定義菜單字元串數組*/
" 0. init list", /*初始化*/
" 1. Enter list", /*輸入記錄*/
" 2. Delete a record from list", /*從表中刪除記錄*/
" 3. print list ", /*顯示單鏈表中所有記錄*/
" 4. Search record on name", /*按照姓名查找記錄*/
" 5. Save the file", /*將單鏈表中記錄保存到文件中*/
" 6. Load the file", /*從文件中讀入記錄*/
" 7. compute the score", /*計算所有學生的總分和均分*/
" 8. insert record to list ", /*插入記錄到表中*/
" 9. the file to new file", /*復制文件*/
" 10. sort to make new file", /*排序*/
" 11. append record to file", /*追加記錄到文件中*/
" 12. index on nomber", /*索引*/
" 13. total on nomber", /*分類合計*/
" 14. Quit"}; /*退出*/
char s[3]; /*以字元形式保存選擇號*/
int c,i; /*定義整形變數*/
gotoxy(1,25); /*移動游標*/
printf("press any key enter menu......\n"); /*壓任一鍵進入主菜單*/
getch(); /*輸入任一鍵*/
clrscr(); /*清屏幕*/
gotoxy(1,1); /*移動游標*/
textcolor(YELLOW); /*設置文本顯示顏色為黃色*/
textbackground(BLUE); /*設置背景顏色為藍色*/
gotoxy(10,2); /*移動游標*/
putch(0xc9); /*輸出左上角邊框┏*/
for(i=1;i<44;i++)
putch(0xcd); /*輸出上邊框水平線*/
putch(0xbb); /*輸出右上角邊框 ┓*/
for(i=3;i<20;i++)
{
gotoxy(10,i);putch(0xba); /*輸出左垂直線*/
gotoxy(54,i);putch(0xba);
} /*輸出右垂直線*/
gotoxy(10,20);putch(0xc8); /*輸出左上角邊框┗*/
for(i=1;i<44;i++)
putch(0xcd); /*輸出下邊框水平線*/
putch(0xbc); /*輸出右下角邊框┛*/
window(11,3,53,19); /* 製作顯示菜單的窗口,大小根據菜單條數設計*/
clrscr(); /*清屏*/
for(i=0;i<16;i++) /*輸出主菜單數組*/
{
gotoxy(10,i+1);
cprintf("%s",menu[i]);
}
textbackground(BLACK); /*設置背景顏色為黑色*/
window(1,1,80,25); /*恢復原窗口大小*/
gotoxy(10,21); /*移動游標*/
do{
printf("\n Enter you choice(0~14):"); /*在菜單窗口外顯示提示信息*/
scanf("%s",s); /*輸入選擇項*/
c=atoi(s); /*將輸入的字元串轉化為整形數*/
}while(c<0||c>14); /*選擇項不在0~14之間重輸*/
return c; /*返回選擇項,主程序根據該數調用相應的函數*/
}
STUDENT *init()
{
return NULL;
}
/*創建鏈表*/
STUDENT *create()
{
int i; int s;
STUDENT *h=NULL,*info; /* STUDENT指向結構體的指針*/
for(;;)
{
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/
if(!info) /*如果指針info為空*/
{
printf("\nout of memory"); /*輸出內存溢出*/
return NULL; /*返回空指針*/
}
inputs("enter no:",info->no,11); /*輸入學號並校驗*/
if(info->no[0]=='@') break; /*如果學號首字元為@則結束輸入*/
inputs("enter name:",info->name,15); /*輸入姓名,並進行校驗*/
printf("please input %d score \n",N); /*提示開始輸入成績*/
s=0; /*計算每個學生的總分,初值為0*/
for(i=0;i<N;i++) /*N門課程循環N次*/
{
do{
printf("score%d:",i+1); /*提示輸入第幾門課程*/
scanf("%d",&info->score[i]); /*輸入成績*/
if(info->score[i]>100||info->score[i]<0) /*確保成績在0~100之間*/
printf("bad data,repeat input\n"); /*出錯提示信息*/
}while(info->score[i]>100||info->score[i]<0);
s=s+info->score[i]; /*累加各門課程成績*/
}
info->sum=s; /*將總分保存*/
info->average=(float)s/N; /*求出平均值*/
info->order=0; /*未排序前此值為0*/
info->next=h; /*將頭結點做為新輸入結點的後繼結點*/
h=info; /*新輸入結點為新的頭結點*/
}
return(h); /*返回頭指針*/
}
/*輸入字元串,並進行長度驗證*/
inputs(char *prompt, char *s, int count)
{
char p[255];
do{
printf(prompt); /*允鞠提示信息*/
scanf("%s",p); /*輸入字元串*/
if(strlen(p)>count)printf("\n too long! \n"); /*進行長度校驗,超過count值重輸入*/
}while(strlen(p)>count);
strcpy(s,p); /*將輸入的字元串拷貝到字元串s中*/
}
/*輸出鏈表中結點信息*/
void print(STUDENT *h)
{
int i=0; /* 統計記錄條數*/
STUDENT *p; /*移動指針*/
clrscr(); /*清屏*/
p=h; /*初值為頭指針*/
printf("\n\n\n****************************STUDENT********************************\n");
printf("|rec|nO | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|---|----------|---------------|----|----|----|--------|-------|-----|\n");
while(p!=NULL)
{
i++;
printf("|%3d |%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", i, p->no,p->name,p->score[0],p->score[1],
p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("**********************************end*********************************\n");
}
/*刪除記錄*/
STUDENT *delete(STUDENT *h)
{
STUDENT *p,*q; /*p為查找到要刪除的結點指針,q為其前驅指針*/
char s[11]; /*存放學號*/
clrscr(); /*清屏*/
printf("please deleted no\n"); /*顯示提示信息*/
scanf("%s",s); /*輸入要刪除記錄的學號*/
q=p=h; /*給q和p賦初值頭指針*/
while(strcmp(p->no,s)&&p!=NULL) /*當記錄的學號不是要找的,或指針不為空時*/
{
q=p; /*將p指針值賦給q作為p的前驅指針*/
p=p->next; /*將p指針指向下一條記錄*/
}
if(p==NULL) /*如果p為空,說明鏈表中沒有該結點*/
printf("\nlist no %s student\n",s);
else /*p不為空,顯示找到的記錄信息*/
{
printf("*****************************have found***************************\n");
printf("|no | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|----------|---------------|----|----|----|--------|-------|-----|\n");
printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", p->no,
p->name,p->score[0],p->score[1],p->score[2],p->sum,
p->average,p->order);
printf("********************************end*******************************\n");
getch(); /*壓任一鍵後,開始刪除*/
if(p==h) /*如果p==h,說明被刪結點是頭結點*/
h=p->next; /*修改頭指針指向下一條記錄*/
else
q->next=p->next; /*不是頭指針,將p的後繼結點作為q的後繼結點*/
free(p); /*釋放p所指結點空間*/
printf("\n have deleted No %s student\n",s);
printf("Don't forget save\n");/*提示刪除後不要忘記保存文件*/
}
return(h); /*返回頭指針*/
}
/*查找記錄*/
void search(STUDENT/*當記錄的姓名不是要找的,或指針不為空時*/
{ p=p->next; /*移動指針,指向下一結點*/
if(p==NULL) /*如果指針為空*/
printf("\nlist no %s student\n",s); /*顯示沒有該學生*/
else /*顯示找到的記錄信息*/
{
printf (*h)
{
STUDENT *p; /* 移動指針*/
char s[15]; /*存放姓名的字元數組*/
clrscr(); /*清屏幕*/
printf("please enter name for search\n");
scanf("%s",s); /*輸入姓名*/
p=h; /*將頭指針賦給p*/
while(strcmp(p->name,s)&&p!=NULL) ("\n\n*****************************havefound***************************\n");
printf("|nO | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|----------|---------------|----|----|----|--------|-------|-----|\n");
printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", p->no,
p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("********************************end*******************************\n");
}
}
}
/*插入記錄*/
STUDENT *insert(STUDENT *h)
{
STUDENT *p,*q,*info; /*p指向插入位置,q是其前驅,info指新插入記錄*/
char s[11]; /*保存插入點位置的學號*/
int s1,i;
printf("please enter location before the no\n");
scanf("%s",s); /*輸入插入點學號*/
printf("\nplease new record\n"); /*提示輸入記錄信息*/
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/
if(!info)
{
printf("\nout of memory"); /*如沒有申請到,內存溢出*/
return NULL; /*返回空指針*/
}
inputs("enter no:",info->no,11); /*輸入學號*/
inputs("enter name:",info->name,15); /*輸入姓名*/
printf("please input %d score \n",N); /*提示輸入分數*/
s1=0; /*保存新記錄的總分,初值為0*/
for(i=0;i<N;i++) /*N門課程循環N次輸入成績*/
{
do{ /*對數據進行驗證,保證在0~100之間*/
printf("score%d:",i+1);
scanf("%d",&info->score[i]);
if(info->score[i]>100||info->score[i]<0)
printf("bad data,repeat input\n");
}while(info->score[i]>100||info->score[i]<0);
s1=s1+info->score[i]; /*計算總分*/
}
info->sum=s1; /*將總分存入新記錄中*/
info->average=(float)s1/N; /*計算均分*/
info->order=0; /*名次賦值0*/
info->next=NULL; /*設後繼指針為空*/
p=h; /*將指針賦值給p*/
q=h; /*將指針賦值給q*/
while(strcmp(p->no,s)&&p!=NULL) /*查找插入位置*/
{
q=p; /*保存指針p,作為下一個p的前驅*/
p=p->next; /*將指針p後移*/
}
if(p==NULL) /*如果p指針為空,說明沒有指定結點*/
if(p==h) /*同時p等於h,說明鏈表為空*/
h=info; /*新記錄則為頭結點*/
else
q->next=info; /*p為空,但p不等於h,將新結點插在表尾*/
else
if(p==h) /*p不為空,則找到了指定結點*/
{
info->next=p; /*如果p等於h,則新結點插入在第一個結點之前*/
h=info; /*新結點為新的頭結點*/
}
else
{
info->next=p; /*不是頭結點,則是中間某個位置,新結點的後繼為p*/
q->next=info; /*新結點作為q的後繼結點*/
}
printf("\n ----have inserted %s student----\n",info->name); printf("---Don't forget save---\n"); /*提示存檔*/
return(h); /*返回頭指針*/
}
/*保存數據到文件*/
void save(STUDENT *h)
{
FILE *fp; /*定義指向文件的指針*/
STUDENT *p; /* 定義移動指針*/
char outfile[10]; /*保存輸出文件名*/
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示文件名格式信息*/
scanf("%s",outfile);
if((fp=fopen(outfile,"wb"))==NULL) /*為輸出打開一個二進制文件,如沒有則建立*/
{
printf("can not open file\n");
exit(1);
}
printf("\nSaving file......\n"); /*打開文件,提示正在保存*/
p=h; /*移動指針從頭指針開始*/
while(p!=NULL) /*如p不為空*/
{
fwrite(p,sizeof(STUDENT),1,fp);/*寫入一條記錄*/
p=p->next; /*指針後移*/
}
fclose(fp); /*關閉文件*/
printf("-----save success!!-----\n"); /*顯示保存成功*/
}
/* 從文件讀數據*/
STUDENT *load()
{
STUDENT *p,*q,*h=NULL; /*定義記錄指針變數*/
FILE *fp; /* 定義指向文件的指針*/
char infile[10]; /*保存文件名*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n"); scanf("%s",infile); /*輸入文件名*/
if((fp=fopen(infile,"rb"))==NULL) /*打開一個二進制文件,為讀方式*/
{
printf("can not open file\n"); /*如不能打開,則結束程序*/
exit(1);
}
printf("\n -----Loading file!-----\n");
p=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/
if(!p)
{
printf("out of memory!\n"); /*如沒有申請到,則內存溢出*/
return h; /*返回空頭指針*/
}
h=p; /*申請到空間,將其作為頭指針*/
while(!feof(fp)) /*循環讀數據直到文件尾結束*/
{
if(1!=fread(p,sizeof(STUDENT),1,fp))
break; /*如果沒讀到數據,跳出循環*/
p->next=(STUDENT *)malloc(sizeof(STUDENT)); /*為下一個結點申請空間*/
if(!p->next)
{
printf("out of memory!\n"); /*如沒有申請到,則內存溢出*/
return h;
}
q=p; /*保存當前結點的指針,作為下一結點的前驅*/
p=p->next; /*指針後移,新讀入數據鏈到當前表尾*/
}
q->next=NULL; /*最後一個結點的後繼指針為空*/
fclose(fp); /*關閉文件*/
printf("---You have success read data from file!!!---\n");
return h; /*返回頭指針*/
}
/*追加記錄到文件*/
void append()
{
FILE *fp; /*定義指向文件的指針*/
STUDENT *info; /*新記錄指針*/
int s1,i;
char infile[10]; /*保存文件名*/
printf("\nplease new record\n");
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/
if(!info)
{
printf("\nout of memory"); /*沒有申請到,內存溢出本函數結束*/
return ;
}
inputs("enter no:",info->no,11); /*調用inputs輸入學號*/
inputs("enter name:",info->name,15); /*調用inputs輸入姓名*/
printf("please input %d score \n",N); /*提示輸入成績*/
s1=0;
for(i=0;i<N;i++)
{
do{
printf("score%d:",i+1);
scanf("%d",&info->score[i]); /*輸入成績*/
if(info->score[i]>100||info->score[i]<0)printf("bad data,repeat input\n");
}while(info->score[i]>100||info->score[i]<0); /*成績數據驗證*/
s1=s1+info->score[i]; /*求總分*/
}
info->sum=s1; /*保存總分*/
info->average=(float)s1/N; /*求均分*/
info->order=0; /*名次初始值為0*/
info->next=NULL; /*將新記錄後繼指針賦值為空*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n"); scanf("%s",infile); /*輸入文件名*/
if((fp=fopen(infile,"ab"))==NULL) /*向二進制文件尾增加數據方式打開文件*/
{
printf("can not open file\n"); /*顯示不能打開*/
exit(1); /*退出程序*/
}
printf("\n -----Appending record!-----\n");
if(1!=fwrite(info,sizeof(STUDENT),1,fp)) /*寫文件操作*/
{
printf("-----file write error!-----\n");
return; /*返回*/
}
printf("-----append sucess!!----\n");
fclose(fp); /*關閉文件*/
}
/*文件拷貝*/
void ()
{
char outfile[10],infile[10];
FILE *sfp,*tfp; /*源和目標文件指針*/
STUDENT *p=NULL; /*移動指針*/
clrscr(); /*清屏*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n");
scanf("%s",infile); /*輸入源文件名*/
if((sfp=fopen(infile,"rb"))==NULL) /*二進制讀方式打開源文件*/
{
printf("can not open input file\n");
exit(0);
}
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示輸入目標文件名*/
scanf("%s",outfile); /*輸入目標文件名*/
if((tfp=fopen(outfile,"wb"))==NULL) /*二進制寫方式打開目標文件*/
{
printf("can not open output file \n");
exit(0);
}
while(!feof(sfp)) /*讀文件直到文件尾*/
{
if(1!=fread(p,sizeof(STUDENT),1,sfp))
break; /*塊讀*/
fwrite(p,sizeof(STUDENT),1,tfp); /*塊寫*/
}
fclose(sfp); /*關閉源文件*/
fclose(tfp); /*關閉目標文件*/
printf("you have success file!!!\n"); /*顯示成功拷貝*/
}
/*排序*/
STUDENT *sort(STUDENT *h)
{
int i=0; /*保存名次*/
STUDENT *p,*q,*t,*h1; /*定義臨時指針*/
h1=h->next; /*將原表的頭指針所指的下一個結點作頭指針*/
h->next=NULL; /*第一個結點為新表的頭結點*/
while(h1!=NULL) /*當原表不為空時,進行排序*/
{
t=h1; /*取原表的頭結點*/
h1=h1->next; /*原表頭結點指針後移*/
p=h; /*設定移動指針p,從頭指針開始*/
q=h; /*設定移動指針q做為p的前驅,初值為頭指針*/
while(t->sum<p->sum&&p!=NULL) /*作總分比較*/
{
q=p; /*待排序點值小,則新表指針後移*/
p=p->next;
}
if(p==q) /*p==q,說明待排序點值大,應排在首位*/
{
t->next=p; /*待排序點的後繼為p*/
h=t; /*新頭結點為待排序點*/
}
else /*待排序點應插入在中間某個位置q和p之間,如p為空則是尾部*/
{
t->next=p; /*t的後繼是p*/
q->next=t; /*q的後繼是t*/
}
}
p=h; /*已排好序的頭指針賦給p,准備填寫名次*/
while(p!=NULL) /*當p不為空時,進行下列操作*/
{
i++; /*結點序號*/
p->order=i; /*將名次賦值*/
p=p->next; /*指針後移*/
}
printf("sort sucess!!!\n"); /*排序成功*/
return h; /*返回頭指針*/
}
/*計算總分和均值*/
void computer(STUDENT *h)
{
STUDENT *p; /*定義移動指針*/
int i=0; /*保存記錄條數初值為0*/
long s=0; /*總分初值為0*/
float average=0; /*均分初值為0*/
p=h; /*從頭指針開始*/
while(p!=NULL) /*當p不為空時處理*/
{
s+=p->sum; /*累加總分*/
i++; /*統計記錄條數*/
p=p->next; /*指針後移*/
}
average=(float)s/i;/* 求均分,均分為浮點數,總分為整數,所以做類型轉換*/
printf("\n--All students sum score is:%ld average is %5.2f\n",s,average);
}
/*索引*/
STUDENT *index(STUDENT *h)
{
STUDENT *p,*q,*t,*h1; /*定義臨時指針*/
h1=h->next; /*將原表的頭指針所指的下一個結點作頭指針*/
h->next=NULL; /*第一個結點為新表的頭結點*/
while(h1!=NULL) /*當原表不為空時,進行排序*/
{
t=h1; /*取原表的頭結點*/
h1=h1->next; /*原表頭結點指針後移*/
p=h; /*設定移動指針p,從頭指針開始*/
q=h; /*設定移動指針q做為p的前驅,初值為頭指針*/
while(strcmp(t->no,p->no)>0&&p!=NULL) /*作學號比較*/
{
q=p; /*待排序點值大,應往後插,所以新表指針後移*/
p=p->next;
}
if(p==q) /*p==q,說明待排序點值小,應排在首位*/
{
t->next=p; /*待排序點的後繼為p*/
h=t; /*新頭結點為待排序點*/
}
else /*待排序點應插入在中間某個位置q和p之間,如p為空則是尾部*/
{
t->next=p; /*t的後繼是p*/
q->next=t; /*q的後繼是t*/
}
}
printf("index sucess!!!\n"); /*索引排序成功*/
return h; /*返回頭指針*/
}
/*分類合計*/
void total(STUDENT *h)
{
STUDENT *p,*q; /*定義臨時指針變數*/
char sno[9],qno[9],*ptr; /*保存班級號的*/
float s1,ave; /*保存總分和均分*/
int i; /*保存班級人數*/
clrscr(); /*清屏*/
printf("\n\n *******************Total*****************\n");
printf("---class---------sum--------------average----\n");
p=h; /*從頭指針開始*/
while(p!=NULL) /*當p不為空時做下面的處理*/
{
memcpy(sno,p->no,8); /*從學號中取出班級號*/
sno[8]='\0'; /*做字元串結束標記*/
q=p->next; /*將指針指向待比較的記錄*/
s1=p->sum; /*當前班級的總分初值為該班級的第一條記錄總分*/
ave=p->average; /*當前班級的均分初值為該班級的第一條記錄均分*/
i=1; /*統計當前班級人數*/
while(q!=NULL) /*內循環開始*/
{
memcpy(qno,q->no,8); /*讀取班級號*/
qno[8]='\0'; /*做字元串結束標記*/
if(strcmp(qno,sno)==0) /*比較班級號*/
{
s1+=q->sum; /*累加總分*/
ave+=q->average; /*累加均分*/
i++; /*累加班級人數*/
q=q->next; /*指針指向下一條記錄*/
}
else
break; /*不是一個班級的結束本次內循環*/
}
printf("%s %10.2f %5.2f\n",sno,s1,ave/i);
if(q==NULL)
break; /*如果當前指針為空,外循環結束,程序結束*/
else
p=q; /*否則,將當前記錄作為新的班級的第一條記錄開始新的比較*/
}
printf("---------------------------------------------\n");
}
你自己改改吧
㈧ c語言課程設計之人員管理系統五百行
你是怎麼個意思?
是要找程序嗎?