❶ 用c語言課程設計—職工工資管理系統(分別用結構體數組和鏈表編寫程序)
#include<stdio.h>
#define NUM 100
void input()
;void search()
;void search_num();
void dele()
;void dele_name();
void dele_num()
;void modi()
;void modi_num();
void output()
;void stat()
;void fun()
;void run();
struct emploee /*職工數據結構*/
{
char no[5];
char name[8];
char sex[3];
int age;
int salar;
}emp[NUM],newemp;
main()
{int x;
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(" 0. 退出系統\n");
printf("\n");
printf("*** 歡迎使用職工工資管理系統 ***\n");
printf("請選擇(0-8):\n");
scanf("%d",&x);
switch(x)
{
case 1: input();break;
case 2: search();break;
case 3: modi();break;
case 4: dele();break;
case 5: output();break;
case 6: stat();break;
case 7: run();break;
case 8: fun();break;
default:printf("\n Wrong!");
}
if(x==0)break;
}
}
void input()
{
FILE *fp;
int n,i;
if ((fp=fopen("emp","wb"))==NULL)
{
printf("不能建立emp文件\n");
exit(1);
}
printf("輸入職工人數:");
scanf("%d",&n);
printf("輸入格式:職工號 姓名 性別 年齡 工資<Enter>\n");
for(i=0;i<n;i++) /* 循環獲取n個職工記錄 */
{
printf("第%d個職工:",i+1);
scanf("%s%s%s%d%d",emp[i].no,emp[i].name,emp[i].sex,
&emp[i].age,&emp[i].salar);
}
for(i=0;i<n;i++) /*將n個職工記錄寫入文件*/
fwrite(&emp[i],sizeof(struct emploee),1,fp);
fclose(fp);
}
/*************************統計模塊**********************/
void stat( )
{
FILE *fp;
int n,num;
if((fp=fopen("emp","rb"))==NULL)
{
printf("不能打開emp文件\n");
exit(1);
}
printf("工資數:");
scanf("%d",&num);
printf("記錄號 職工號 姓名 性別 年齡 工資\n");
for(n=0;fread(&emp,sizeof(struct emploee),1,fp);n++)
if(emp[n].salar>=num)
printf("%6d%6s%9s%4s%5d%6d\n",n+1,emp[n].no,emp[n].name,emp[n].sex,
emp[n].age,emp[n].salar);
fclose(fp);
}
/********************刪除模塊*******************/
void dele()
{
int x;
while(1)
{
printf("\n\n\t\t刪除子菜單\n");
printf("\t\t*********\n");
printf("\t\t 1.按職工號刪除記錄\n");
printf("\t\t 0.返回主菜單\n");
printf("\t\t*********\n");
printf("\t 請選擇(0-1):");
scanf("%d",&x);
switch(x)
{case 1:dele_num();break;
default:printf("\nWrong!");
}
if(x==0)break;
}
}
void dele_num()
{
FILE *fp;
int i,j,n;
char num[5];
if((fp=fopen("emp","rb"))==NULL)
{
printf("不能打開emp文件\n");
exit(1);
}
printf("刪除前:\n");
printf("記錄號 職工號 姓名 性別 年齡 工資\n");
for(n=0;fread(&emp[n],sizeof(struct emploee),1,fp);n++)
printf("%6s%6s%9s%4s%5d%6d\n",n+1,emp[n].no,emp[n].name,emp[n].sex,
emp[n].age,emp[n].salar); /*n為emp文件中記錄數*/
printf("要刪除的職工號:");
scanf("%s",num);
for(i=0;(strcmp(emp[i].no,num)!=0&&i<n);i++)
if(i>=n)
{
printf("\t沒有%s職工號的職工\n",num);
exit(2);
}
fclose(fp);
fp=fopen("emp","w+");
if(n==1) /*一個記錄已經刪除了*/
{
fclose(fp);
exit(3);
}
for(j=0;j<i;j++)
fwrite(&emp[j],sizeof(struct emploee),1,fp);
for(j=i+1;j<n;j++)
fwrite(&emp[j],sizeof(struct emploee),1,fp);
printf("刪除後:\n");
fseek(fp,0,SEEK_SET);
printf("記錄號 職工號 姓名 性別 年齡 工資\n");
for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp);i++)
printf("%6s%6s%9s%4s%5d%6d\n",i+1,emp[i].no,emp[i].name,emp[i].sex,
emp[i].age,emp[i].salar);
fclose(fp);
}
/********************修改模塊*******************/
void modi()
{
int x;
while(1)
{
printf("\n\n\t\t修改子菜單\n");
printf("\t\t*********************\n");
printf("\t\t1. 按職工號修改\n");
printf("\t\t0. 返回主菜單\n");
printf("\t\t*********************\n");
printf("\t請選擇(0-1):");
scanf("%d",&x);
switch(x)
{
case 1:modi_num();break;
default:printf("\n輸錯誤!");
}
if(x==0)break;
}
}
void modi_num()
{
FILE *fp;
int i,j;
char num[5];
if((fp=fopen("emp","rb+"))==NULL)
{
printf("不能 打開emp文件\n");
exit(1);
}
printf("要修改的職工號:");
scanf("%s",num);
for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp);i++)
if(!strcmp(emp[i].no,num))break;
if(feof(fp))
{
printf("\t沒有%s職工號的職工\n",num);
exit(2);
}
printf("記錄號 職工號 姓名 性別 年齡 工資\n");
printf("%6d%6s%9s%4s%5d%6d\n",i+1,emp[i].no,emp[i].name,emp[i].sex,
emp[i].age,emp[i].salar);
printf("輸入格式:職工號 姓名 性別 年齡 工資<Enter>\n");
printf("第%d個記錄:",i+1);
scanf("%s%s%s%d%d",newemp.no,newemp.name,newemp.sex,&newemp.age,
&newemp.salar);/*獲取新的職工記錄*/
fseek(fp,-(long)sizeof(struct emploee),SEEK_CUR);
/*文件指針指向該修改的記錄開頭*/
fwrite(&newemp,sizeof(struct emploee),1,fp);/*用newemp覆蓋當前記錄*/
printf(" 修改後:\n");
fseek(fp,0,SEEK_SET);/*顯示修改後的文件數據*/
printf("記錄號 職工號 姓名 性別 年齡 工資\n");
for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp)!=0;i++)
printf("%6d%6s%9s%4s%5d%6d\n",i+1,emp[i].no,emp[i].name,emp[i].sex,
emp[i].age,emp[i].salar);
fclose(fp);
}
/*************************查詢模塊***********************/
void search( )
{
int x;
while(1)
{
printf("\n\n\t\t查子菜單\n");
printf("\t\t********************\n");
printf("\t\t 1.按職工號查詢\n");
printf("\t\t 0.返回主菜單\n");
printf("\t\t********************\n");
printf("\t請選擇(0-1):");
scanf("%d",&x);
switch(x)
{
case 1:search_num();break;
default :printf("\n Wrong!");
}
if(x==0) break;
}
}
void search_num()
{
FILE *fp;
int i;
char num;
if((fp=fopen("emp","rb"))==NULL)
{
printf("不能打開emp文件\n");
exit(1);
}
printf("要查詢的職工號:");
scanf("%s",num);
for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp);i++)
if(!strcmp(emp[i].no,num)) break;
if(feof(fp))
{
printf("\t查無此人\n");
exit(2);
}
printf("記錄號 職工號 姓名 性別 年齡 工資\n");
printf("%6d%6s%9s%4s%5d%6d\n",i+1,emp[i].no,emp[i].name,emp[i].sex,
emp[i].age,emp[i].salar);
fclose(fp);
}
/*******************輸出模塊********************/
void output()
{int i;
FILE *fp;
if((fp=fopen("emp","r"))==NULL)
{printf("不能打開emp文件\n");
exit(0);
}
printf("記錄號 職工號 姓名 性別 年齡 工資\n");
for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp)!=0;i++)
{
printf("%6d%6s%9s%4s%5d%6d\n",i+1,emp[i].no,emp[i].name,emp[i].sex,
emp[i].age,emp[i].salar);
}
fclose(fp);
}
/******************追加模塊*******************/
void run()
{
FILE *fp;
int n,i,j;
if((fp=fopen("emp","ab+"))==NULL)
{printf("不能打開emp文件\n");
exit(0);
}
printf("要追加的職工人數:");
scanf("%d",&n);
for(i=0;i<n;i++)
{ printf("輸入格式:職工號 姓名 性別 年齡 工資<enter>\n");
printf("職工記錄:");
scanf("%s%s%s%d%d",newemp.no,newemp.name,newemp.sex,&newemp.age,
&newemp.salar);
/*獲取一個職工記錄*/
fwrite(&newemp,sizeof(struct emploee),1,fp);
/*將該職工記錄寫入文件*/
}
fclose(fp);
}
/*******************顯示模塊****************/
void fun()
{printf("\t\t******************************************\n");
printf("\t\t* *\n");
printf("\t\t* *\n");
printf("\t\t* 謝 謝 使 用 ! *\n");
printf("\t\t* *\n");
printf("\t\t* *\n");
printf("\t\t******************************************\n");
}
❷ 一個c語言的程序題
首先,定義一個單鏈表的結構體,用來存儲整數值和指向下一個結構體的指針
然後,在main()函數中定義一個頭節點指針,並用它來存儲整個鏈表
-
❸ C語言,指針、結構體和鏈表方面的簡單的程序,幫我改錯就行,請注釋和修正,,發源代碼給我,謝謝
沒主函數么
❹ 用C語言編寫程序建立鏈表結構體類型實現鏈表初始化遍歷和插入演算法
#include <stdio.h>
#include <stdlib.h>
#define telemtype char
#define ok 1
#define error 0
#define overflow -1
typedef int status;
typedef struct bitnode
{
telemtype data;
struct bitnode *lchild,*rchild;
}bitnode,*bitree;
void preordertraverse(bitree T)
{
if(T)
{
printf("%c ",T->data);
preordertraverse(T->lchild);
preordertraverse(T->rchild);
}
}
status createbitree(bitree &T)
{
int ch;
ch=getchar();
if(ch==' ')
T=NULL;
else
{
if(!(T=(bitnode*)malloc(sizeof(bitnode))))
exit(overflow);
T->data=ch;
createbitree(T->lchild);
createbitree(T->rchild);
}
return ok;
}
void prinbtree(bitree T)
{
if(T!= NULL)
{
printf("%c", T->data);
if(T->lchild!=NULL||T->rchild!=NULL)
{
printf("(");
prinbtree(T->lchild);
if(T->rchild!=NULL)
{
printf(",");
}
prinbtree(T->rchild);
printf(")");
}
}
}
int main()
{
bitree T=NULL;
printf("先序輸入二叉樹:\n");
createbitree(T);
printf("先序遍歷二叉樹為:\n");
preordertraverse(T);
printf("\n");
prinbtree(T);
printf("\n");
return 0;
}
我寫的,希望對你有用!