當前位置:首頁 » 編程語言 » 北郵c語言大作業
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

北郵c語言大作業

發布時間: 2022-04-28 02:53:20

『壹』 學了一學期的c語言,要做大作業。 求一個500行C語言程序代碼。 可以在VC++6.0上運行的。

//戶籍管理系統, 應該能滿足你的要求。
//多給點財富吧
#include<stdio.h>
#include<stdlib.h>
typedef struct tagHuJiXinXi
{
char shfzhh[64]; //身份證號
char xm[16]; //姓名
char xb[8]; //性別
int nl; //年齡
char xl[64]; //學歷
char zhzh[64]; //住址
char dh[32]; //電話
}HuJiXinXi,*PtHuJiXinXi;
void readfromfile();
void writetofile();
void tuichu();
void add();
void outputone();
void outputall();
void sortbyage();
void myrealloc();
void findbyagerange();
void del();
void alter();
void find();
void showmenu();
void processmenu(int m);
PtHuJiXinXi pt;
int count=0,capacity=16;
int main()
{
int m;

pt=(PtHuJiXinXi)calloc(capacity,sizeof(HuJiXinXi));
readfromfile();
while(1)
{
showmenu();
scanf("%d",&m);
processmenu(m);
}
system("PAUSE");
return EXIT_SUCCESS;
}
void processmenu(int m)
{
switch(m)
{
case 0:
tuichu();
break;
case 1:
add();
break;
case 2:
del();
break;
case 3:
alter();
break;
case 4:
outputall();
break;
case 5:
sortbyage();
break;
case 6:
findbyagerange();
break;
case 7:
writetofile();
break;
case 8:
find();
break;
default:
printf("不可識別的命令。\n");
}
}
//實現存儲空間的自動擴充
void myrealloc()
{
if(count+1>=capacity)
{
int i;
capacity*=2;
PtHuJiXinXi temppt=(PtHuJiXinXi)calloc(capacity,sizeof(HuJiXinXi));
for(i=0;i<count;i++)
{
temppt[i]=pt[i];
}

free(pt);
pt=temppt;
}
}
void readfromfile()
{
char f[128];
FILE *inf;
HuJiXinXi hjxx;

printf("請輸入包含戶籍信息的文件的文件名,如果還沒有文件,請輸入omit(文件中每行一條戶籍信息,");
printf("格式:身份證號 姓名 性別 年齡 學歷 住址 電話)...\n");
gets(f);
if(!strcmp(f,"omit"))
{
return;
}
inf=fopen(f,"r");
if(NULL!=inf)
{
do
{
fscanf(inf,"%s %s %s %d %s %s %s",hjxx.shfzhh,hjxx.xm,hjxx.xb,&hjxx.nl,hjxx.xl,hjxx.zhzh,hjxx.dh);
myrealloc();
pt[count++]=hjxx;
}while(!feof(inf));
fclose(inf);
printf("信息已成功載入。\n");
}
else
{
printf("文件名無效或文件無數據。\n");
}
}
void writetofile()
{
char f[128]={'\0'};
FILE *outf;
int i;

printf("請輸入保存戶籍信息的文件的文件名:\n");
scanf("%s",f);
outf=fopen(f,"w");
if(NULL!=outf)
{
for(i=0;i<count;i++)
{
fprintf(outf,"%s %s %s %d %s %s %s",pt[i].shfzhh,pt[i].xm,pt[i].xb,pt[i].nl,pt[i].xl,pt[i].zhzh,pt[i].dh);
if(count-1!=i)
{
fprintf(outf,"%s","\n");
}
}
fclose(outf);
printf("文件保存成功。\n");
}
else
{
printf("文件名無效。\n");
}
}
void showmenu()
{
char menu[]="菜單:\n0、退出\n1、添加一條信息\n2、刪除一條信息\n3、批量修改\n4、瀏覽全部信息\n5、按年齡排序 \n6、按年齡區間查詢\n7、保存到文件\n8、隨意查詢\n請選擇一個菜單:";

puts(menu);
}
void tuichu()
{
if(NULL==pt)
{
free(pt);
}
exit(0);
}
//判斷身份證號是否重復
int isshfzhhchf(char s[64])
{
int i,r=0;

for(i=0;i<count;i++)
{
if(!strcmp(pt[i].shfzhh,s))
{
r=1;
break;
}
}
return r;
}
void add()
{
myrealloc();
printf("添加一條戶籍信息。\n");
printf("請輸入身份證號 姓名 性別 年齡 學歷 住址 電話:\n");
scanf("%s %s %s %d %s %s %s",pt[count].shfzhh,pt[count].xm,pt[count].xb,&pt[count].nl,
pt[count].xl,pt[count].zhzh,pt[count].dh);
if(!isshfzhhchf(pt[count].shfzhh))
{
count++;
printf("添加成功。\n");
}
else
{
printf("身份證號重復,添加失敗。\n");
}
}
//輸出下標為n的一條戶籍信息
void outputone(int n)
{
if(n>=0 && n<count)
{
printf("第%d條戶籍信息:\n",n+1);
printf("%s %s %s %d %s %s %s。\n",pt[n].shfzhh,pt[n].xm,pt[n].xb,pt[n].nl,pt[n].xl,pt[n].zhzh,pt[n].dh);
}
else
{
printf("沒有第%d條戶籍信息存在。\n",n+1);
}
}
void outputall()
{
if(0==count)
{
printf("系統已空。\n");
}
else
{
int i;
for(i=0;i<count;i++)
{
outputone(i);
}
}
}
void sortbyage()
{
int i,j,px;
HuJiXinXi hjxx;

printf("子菜單:\n1、升序\n2、降序\n請選擇:");
scanf("%d",&px);
if(1==px || 2==px)
{
for(i=0;i<count-1;i++)
{
for(j=0;j<count-i-1;j++)
{
if(1==px)
{
if(pt[j].nl>pt[j+1].nl)
{
hjxx=pt[j+1];
pt[j+1]=pt[j];
pt[j]=hjxx;
}
}
else
{
if(pt[j].nl<pt[j+1].nl)
{
hjxx=pt[j+1];
pt[j+1]=pt[j];
pt[j]=hjxx;
}
}
}
}
printf("排序完成。\n");
}
else
{
printf("無法處理的子菜單命令。\n");
}
}
void findbyagerange()
{
int i,min,max,c=0;

printf("請輸入要查找的戶籍信息的最小年齡和最大年齡:");
scanf("%d %d",&min,&max);
printf("查詢結果如下:\n");
for(i=0;i<count;i++)
{
if(pt[i].nl>=min && pt[i].nl<=max)
{
outputone(i);
printf("符合你的要求。\n");
c++;
}
}
if(0==c)
{
printf("沒有符合你的要求的戶籍信息。\n");
}
}
//刪除一條戶籍信息
void del()
{
int i,n;
HuJiXinXi hjxx;

printf("請輸入要刪除的是第幾條戶籍信息:");
scanf("%d",&n);
if(n-1>=0 && n-1<count)
{
hjxx=pt[n-1];
for(i=n;i<count;i++)
{
pt[i-1]=pt[i];
}
printf("刪除成功。\n第%d條戶籍信息:\n",n);
printf("%s %s %s %d %s %s %s。",hjxx.shfzhh,hjxx.xm,hjxx.xb,hjxx.nl,hjxx.xl,hjxx.zhzh,hjxx.dh);
printf(",已刪除。\n");
count--;
}
else
{
printf("刪除失敗。\n不存在第%d條戶籍信息。\n",n);
}
}
//根據hjxx的值修改下標為n的戶籍信息
//對於pt[n]的對應欄位,如果在hjxx中是用*表示的,則不修改
void change(HuJiXinXi hjxx,int n)
{
//返回非0值,意味著hjxx.shfzhh(身份證號)不等於*,即需要修改pt[n].shfzhh欄位,以下都類似
if(strcmp(hjxx.shfzhh,"*"))
{
strcpy(pt[n].shfzhh,hjxx.shfzhh);
}
if(strcmp(hjxx.xm,"*"))
{
strcpy(pt[n].xm,hjxx.xm);
}
if(strcmp(hjxx.xb,"*"))
{
strcpy(pt[n].xb,hjxx.xb);
}
//不等於-1表示需要修改pt[n].nl(年齡)
if(-1!=hjxx.nl)
{
pt[n].nl=hjxx.nl;
}
if(strcmp(hjxx.xl,"*"))
{
strcpy(pt[n].xl,hjxx.xl);
}
if(strcmp(hjxx.zhzh,"*"))
{
strcpy(pt[n].zhzh,hjxx.zhzh);
}
if(strcmp(hjxx.dh,"*"))
{
strcpy(pt[n].dh,hjxx.dh);
}
}
//對戶籍信息進行批量修改
void alter()
{
int n;
HuJiXinXi hjxx;
char nl[16];

while(1)
{
printf("請輸入要修改第幾條戶籍信息(-1退出循環):");
scanf("%d",&n);
if(-1==n)
{
break;
}
else if(n-1>=0 && n-1<count)
{
printf("修改...\n");
outputone(n-1);
printf("請輸入將此戶籍信息修改後的新的姓名 性別 年齡 學歷 住址 電話(保持原值的用*代替):\n");
scanf("%s %s %s %s %s %s",hjxx.xm,hjxx.xb,nl,hjxx.xl,hjxx.zhzh,hjxx.dh);
//因為只有nl(年齡)是int型,故對nl作特殊處理,-1表示修改時年齡保持原值不變(不修改)
hjxx.nl=(strcmp(nl,"*") ? atoi(nl) : -1);
strcpy(hjxx.shfzhh,"*");
change(hjxx,n-1);
printf("修改完成。\n");
}
else
{
printf("無法修改,不存在第%d條戶籍信息。\n",n);
}
}
}
//用於判斷pt[n]是否匹配hjxx的模式
int ismatch(HuJiXinXi hjxx,int n)
{
int r=1;

if(strcmp(hjxx.shfzhh,"*") && strcmp(hjxx.shfzhh,pt[n].shfzhh))
{
r=0;
}
if(r && strcmp(hjxx.xm,"*") && strcmp(hjxx.xm,pt[n].xm))
{
r=0;
}
if(r && strcmp(hjxx.xb,"*") && strcmp(hjxx.xb,pt[n].xb))
{
r=0;
}
if(r && -1!=hjxx.nl && hjxx.nl!=pt[n].nl)
{
r=0;
}
if(r && strcmp(hjxx.xl,"*") && strcmp(hjxx.xl,pt[n].xl))
{
r=0;
}
if(r && strcmp(hjxx.zhzh,"*") && strcmp(hjxx.zhzh,pt[n].zhzh))
{
r=0;
}
if(r && strcmp(hjxx.dh,"*") && strcmp(hjxx.dh,pt[n].dh))
{
r=0;
}
return r;
}
//按模式查詢戶籍信息
void find()
{
int i,c=0;
char nl[16];
HuJiXinXi hjxx;

printf("請輸入要查詢的戶籍信息的身份證號 姓名 性別 年齡 學歷 住址 電話(只需提供關鍵信息以用於查詢,不提供的信息請用*代替):\n");
scanf("%s %s %s %s %s %s %s",hjxx.shfzhh,hjxx.xm,hjxx.xb,nl,hjxx.xl,hjxx.zhzh,hjxx.dh);
//因為只有nl(年齡)是int型,故對nl作特殊處理,-1表示查詢時不需比較年齡
hjxx.nl=(strcmp(nl,"*") ? atoi(nl) : -1);
for(i=0;i<count;i++)
{
if(ismatch(hjxx,i))
{
printf("找到第%d條滿足你的模式要求的戶籍信息如下:\n",c+1);
printf("%s %s %s %d %s %s %s。\n",pt[i].shfzhh,pt[i].xm,pt[i].xb,pt[i].nl,pt[i].xl,pt[i].zhzh,pt[i].dh);
c++;
}
}
if(!c)
{
printf("系統中沒有滿足你的模式要求的戶籍信息。\n");
}
}

『貳』 C語言大作業的問題

#include<stdio.h>
#definecourse2
#definestud40
intinput(intscore[][course],longnum[]);
voidtotal(intscore[][course],intsum[],intn);
voidprint(intscore[][course],longnum[],intsum[],intn);
voidsort(intscore[][course],longnum[],intsum[],intn);
main()
{
intn;
longnum[stud];
intscore[stud][course],sum[stud];
n=input(score,num);
total(score,sum,n);
sort(score,num,sum,n);
print(score,num,sum,n);

}
intinput(intscore[][course],longnum[])
{
inti,j,n;
printf("輸入學生的人數:");
scanf("%d",&n);
printf("Enter學號.andscoreas:高等數學大學物理 ");

for(i=0;i<n;i++)
{
scanf("%ld",&num[i]);
for(j=0;j<course;j++)
{
scanf("%d",&score[i][j]);
}
}
returnn;
}
voidtotal(intscore[][course],intsum[],intn)
{
inti,j;
for(i=0;i<n;i++)
{
sum[i]=0;
for(j=0;j<course;j++)
{
sum[i]=sum[i]+score[i][j];
}

}
}
voidsort(intscore[][course],longnum[],intsum[],intn)
{
inttemp,temp1,temp2;
inti,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(sum[j]>sum[i])
{
temp=sum[j];
sum[j]=sum[i];
sum[i]=temp;

temp1=num[j];
num[j]=num[i];
num[i]=temp1;

}
}
voidprint(intscore[][course],longnum[],intsum[],intn)
{
inti,j;
printf("Result: ");
printf("No 高等數學 大學物理 總分 ");
for(i=0;i<n;i++)
{
printf("%4ld ",num[i]);
for(j=0;j<course;j++)
{
printf("%4d ",score[i][j]);
}
printf("%5d ",sum[i]);
}

}

『叄』 北郵同學C語言題啊~我哭啊~在線等答案啊

#include <stdio.h>

int CheckLeap(int year)
{
return ((year%4==0)&&(year%100)||(year%400==0));
}
int GetWeekDay(int year,int month,int day)
{
if (month<3) {
month+=12;
year--;
}
return (day+2*month+3*(month+1)/5+year+year/4-year/100+year/400+1) % 7 ;
}

int GetMonthDays(int year,int month)
{
switch (month) { default:
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:return 31;break;
case 4:
case 6:
case 9:
case 11:return 30;break;
case 2:return CheckLeap(year)?29:28;break;
}
}
void PrintMonthCalender(int startDay,int days)
{
int i,j=0;printf("Sun.\tMon.\tTue.\tWed.\tThu.\tFri.\tSat.\n");
for (i = 0; i<startDay; i++) {
putchar('\t');
j++;
}
for (i=1; i<=days; j++,i++) {
if (j&&j%7==0) {
putchar('\n');
}
printf("%d\t",i);
}
}

int main(int argc, char* argv[])
{
int year,month;
printf("Input the year and month<yyyy-mm>:");
scanf("%d-%d",&year,&month);
printf("\t\t%d-%02d\n",year,month);
PrintMonthCalender(GetWeekDay(year,month,1),GetMonthDays(year,month));
return 0;
}

『肆』 大家好。我是北京郵電大學大一的,初學計算機C語言有點懵。星期六有上機考試,用的是北郵OJ系統答上機題。

OJ 上面可以選編譯器的 用VC 和DEV 在有些地方有點不同,但大體上沒什麼區別的,只要注意不要輸出不必要的內容,輸出格式什麼的注意下就是 了

『伍』 C語言大作業怎麼做

給你個大概思路~~~~~
1。把每個學生的的信息先組合成一個結構體
struct
Student
{
……},
然後就用它來定義學生,
struct
Student
stu[100];(有能力的話建義用動態內存的鏈表結構,不明白當我沒說)
2。「自頂向下,逐步求精」,把各個功能寫成各個函數,如添加,刪除,查詢,退出……(看你自己了,這正是C語言的模塊化思想
3。主函數就是打出這些選擇,讓USER
去選,然後調用相應的函數去執行,完了又回到主菜單,以此循環
如果能使用圖形的界面,增加動畫之類的會更好的(呵呵,不會當我沒說~~~~)

『陸』 c語言的大作業

以下程序做討論3個科目的,具體為數學,中文,英語。如果增加科目,具體改變相應的數字。

#include "stdio.h"
#include<conio.h>
#include<string.h>
#include<stdlib.h>
struct {
char num[10];/*the number of the student*/
int score_math;/*the score of the mathematic*/
int score_chinese;
int score_enlish;
}Student; /*the information of student*/
int Avg_student(Student[],int index)
{
int avg=0;
avg=(Student[i].chinese+Student[i].math+Student[i].english)/3 ;/*the average of a student in three courses.*/
}
....給我加分吧。剩下的我通過QQ: 346994177 回復給你吧。還有期中具體的一些細節要交流下;

『柒』 c語言大作業,輸入五個學生的學號,姓名,性別,然後可以用年份輸出,班級輸出,性別輸出,求改錯

do{
printf(" 請輸入數字0-4:");
c=getchar();
n=c-48;}
while((n<0)||(n>4));

由於輸入的時候會帶入回車,真正執行的時候你打0回車其實是輸入了0 ,此循環會被執行3次

printf("%s%s%c");

這句沒帶參數

『捌』 C語言大作業,這題該怎麼寫

圖片看不清,只看到學生信息錄入。
學生信息包含多個類型數據,比如學生學號、成績、班級、年級、學科、成績等等。
所以學生應該定義為結構體。
學生數量可以用常量表示。之後定義結構數組用於循環接收學生信息的錄入。
之後學生信息的輸出,成績分析,求平均之類,都只是對結構數組的循環遍歷。

『玖』 C語言大作業

上接另一個賬號<梅園寨主>

list.h

#ifndeflist_h
#definelist_h
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
typedefstructnNodeNode;
structnNode
{
//向上指針
Node*nUp;
//向下指針
Node*nDown;
//學號
intiId;
//班級
char*pcClass;
//姓名
char*pcName;
//數學
floatfMath;
//英語
floatfEng;
//計算機
floatfCmp;
//平均分
floatfAver;
};
typedefstruct
{
Node*nTop;
Node*nBottom;
intiSize;
}List;
//新建節點
Node*Node_new(intiId,char*pcClass,char*pcName,floatfMath,floatacEng,floatacCmp);
//刪除節點
voidNode_delete(Node*nNode);
//輸出節點的值
voidNode_print(Node*nNode);
//新建鏈表
List*List_new(void);
//刪除鏈表
voidList_delete(List*lList);
//節點從鏈表頂部加入
voidList_pushTop(List*lList,Node*nNewNode);
//節點從鏈表頂部取出
Node*List_popTop(List*lList);
//節點從鏈表底部加入
voidList_pushBottom(List*lList,Node*nNewNode);
//節點從鏈表底部取出
Node*List_popBottom(List*lList);
//節點從鏈表指定位置插入
voidList_insert(List*lList,Node*nNewNode,intiIndex);
//從鏈表中移除指定節點
voidList_remove(List*lList,Node*nOldNode);
//遍歷鏈表void(*visit)(Node*)是指向函數的指針
voidList_traverse(List*lList,void(*visit)(Node*));
//這個節點在鏈表是第幾個節點
intgetIndex(List*lList,Node*nOldNode);
//按平均分排序
voidList_sortByAver(List*lList);
//按計算機成績排序
voidList_sortByCmp(List*lList);
//按學號輸出
voidList_printById(List*lList);
//按姓名輸出
voidList_printByName(List*lList);
#endif//list_h

list.c

#include"list.h"
//新建節點
Node*Node_new(intiId,char*pcClass,char*pcName,floatfMath,floatfEng,floatfCmp)
{
intiSize;
Node*nNode=(Node*)malloc(sizeof(Node));
//設置向上指針
nNode->nUp=NULL;
//設置向下指針
nNode->nDown=NULL;
//設置學號
nNode->iId=iId;
//設置班級
if(pcClass!=NULL)
iSize=strlen(pcClass);
else
iSize=0;
if(iSize!=0)
{
nNode->pcClass=(char*)malloc(sizeof(char)*(iSize)+1);
strcpy(nNode->pcClass,pcClass);
nNode->pcClass[iSize]='';
}
//設置姓名
if(pcName!=NULL)
iSize=strlen(pcName);
else
iSize=0;
if(iSize!=0)
{
nNode->pcName=(char*)malloc(sizeof(char)*(iSize)+1);
strcpy(nNode->pcName,pcName);
nNode->pcName[iSize]='';
}
//設置數學成績
nNode->fMath=fMath;
//設置英語成績
nNode->fEng=fEng;
//設置計算機成績
nNode->fCmp=fCmp;
//設置平均成績
nNode->fAver=(fMath+fEng+fCmp)/3.0;
returnnNode;
}
//刪除節點
voidNode_delete(Node*nNode)
{
free(nNode->pcClass);
free(nNode->pcName);
free(nNode);
}
//輸出節點的值
voidNode_print(Node*nNode)
{
//輸出學號
printf("學號:%d ",nNode->iId);
//輸出班級
printf("班級:%s ",nNode->pcClass);
//輸出姓名
printf("姓名:%s ",nNode->pcName);
//輸出數學成績
printf("數學:%.1f ",nNode->fMath);
//輸出英語成績
printf("英語:%.1f ",nNode->fEng);
//輸出計算機成績
printf("計算機:%.1f ",nNode->fCmp);
//輸出平均成績
printf("平均分:%.2f ",nNode->fAver);
}
//新建鏈表
List*List_new(void)
{
List*lList=(List*)malloc(sizeof(List));
lList->iSize=0;
lList->nTop=Node_new(0,"","",0.0,0.0,0.0);
lList->nBottom=Node_new(0,"","",0.0,0.0,0.0);
lList->nTop->nDown=lList->nBottom;
lList->nBottom->nUp=lList->nTop;
returnlList;
}
//刪除鏈表
voidList_delete(List*lList)
{
Node*nNode;
for(;lList->iSize>0;)
{
nNode=lList->nTop->nDown;
lList->nTop->nDown=lList->nTop->nDown->nDown;
Node_delete(nNode);
lList->iSize--;
}
if(lList->nTop!=NULL)
Node_delete(lList->nTop);
if(lList->nBottom!=NULL)
Node_delete(lList->nBottom);
free(lList);
}
//節點從鏈表頂部加入
voidList_pushTop(List*lList,Node*nNewNode)
{
//新節點nUp指針連接到鏈表頂部節點
nNewNode->nUp=lList->nTop;
//新節點nDown指針連接到鏈表頂部節點的下一節點
nNewNode->nDown=lList->nTop->nDown;
//鏈表頂部節點的下一節點nUp指針連接到新節點
lList->nTop->nDown->nUp=nNewNode;
//鏈表頂部節點nDown指針連接到新節點
lList->nTop->nDown=nNewNode;
lList->iSize++;
}
//節點從鏈表頂部取出
Node*List_popTop(List*lList)
{
//備份將要彈出的節點
Node*nNode=lList->nTop->nDown;
if(lList->iSize>0)
{
//鏈表頂部節點下下節點的nUp指針連接到鏈表頂部節點
lList->nTop->nDown->nDown->nUp=lList->nTop;
//鏈表頂部節點的nDown指針連接到下下節點
lList->nTop->nDown=lList->nTop->nDown->nDown;
nNode->nUp=NULL;
nNode->nDown=NULL;
lList->iSize--;
}
else
printf("%s ","List_popTop()函數報錯,此鏈表是空的,沒有節點可取出。");
returnnNode;
}
//節點從鏈表底部加入
voidList_pushBottom(List*lList,Node*nNewNode)
{
//新節點nDown指針連接到鏈表底部節點
nNewNode->nDown=lList->nBottom;
//新節點nUp指針連接到鏈表底部節點的上一節點
nNewNode->nUp=lList->nBottom->nUp;
//鏈表底部節點的上一節點nDown指針連接到新節點
lList->nBottom->nUp->nDown=nNewNode;
//鏈表底部節點nUp指針連接到新節點
lList->nBottom->nUp=nNewNode;
lList->iSize++;
}
//節點從鏈表底部取出
Node*List_popBottom(List*lList)
{
//備份將要彈出的節點
Node*nNode=lList->nBottom->nUp;
if(lList->iSize>0)
{
//鏈表底部節點上上節點的nDown指針連接到鏈表底部節點
lList->nBottom->nUp->nUp->nDown=lList->nBottom;
//鏈表底部節點的nUp指針連接到上上節點
lList->nBottom->nUp=lList->nBottom->nUp->nUp;
nNode->nUp=NULL;
nNode->nDown=NULL;
lList->iSize--;
}
else
printf("%s ","List_popBottom()函數報錯,此鏈表是空的,沒有節點可取出。");
returnnNode;
}
//節點從鏈表指定位置插入
voidList_insert(List*lList,Node*nNewNode,intiIndex)
{
Node*nOldNode=lList->nTop->nDown;
inti;
for(i=0;i<iIndex;i++)
nOldNode=nOldNode->nDown;
//把nNewNode節點插到nOldNode節點上面
nNewNode->nUp=nOldNode->nUp;
nNewNode->nDown=nOldNode;
nOldNode->nUp->nDown=nNewNode;
nOldNode->nUp=nNewNode;
lList->iSize++;
}
//從鏈表中移除指定節點
voidList_remove(List*lList,Node*nOldNode)
{
//斷開nOldNode節點的前後鏈接
nOldNode->nUp->nDown=nOldNode->nDown;
nOldNode->nDown->nUp=nOldNode->nUp;
lList->iSize--;
}
//遍歷鏈表void(*visit)(Node*)是指向函數的指針
voidList_traverse(List*lList,void(*visit)(Node*))
{
//得到頂部節點指針
Node*nNode=lList->nTop;
inti,iSize=lList->iSize;
for(i=0;i<iSize;i++)
{
nNode=nNode->nDown;
visit(nNode);
}
}
//這個節點在鏈表是第幾個節點
intgetIndex(List*lList,Node*nOldNode)
{
inti,iSize=lList->iSize;
Node*nNode=lList->nTop;
for(i=0;i<iSize;i++)
{
nNode=nNode->nDown;
if(nOldNode==nNode)
returni;
}
return-1;
}
//按平均分排序
voidList_sortByAver(List*lList)
{
Node*nNode=NULL;
Node*nMaxNode=NULL;
inti,j,iSize=lList->iSize;
floatfMax;
for(i=0;i<iSize;i++)
{
fMax=0.0;
nNode=lList->nTop;
for(j=iSize-i;j>0;j--)
{
nNode=nNode->nDown;
if(nNode->fAver>fMax)
{
fMax=nNode->fAver;
nMaxNode=nNode;
}
}
//把最高平均分節點移除
List_remove(lList,nMaxNode);
//把最高平均分節從鏈表底部加入
List_pushBottom(lList,nMaxNode);
}
}
//按計算機成績排序
voidList_sortByCmp(List*lList)
{
Node*nNode=NULL;
Node*nMaxNode=NULL;
inti,j,iSize=lList->iSize;
floatfMax;
for(i=0;i<iSize;i++)
{
fMax=0.0;
nNode=lList->nTop;
for(j=iSize-i;j>0;j--)
{
nNode=nNode->nDown;
if(nNode->fCmp>fMax)
{
fMax=nNode->fCmp;
nMaxNode=nNode;
}
}
//把最高計算機分節點移除
List_remove(lList,nMaxNode);
//把最高計算機分節從鏈表底部加入
List_pushBottom(lList,nMaxNode);
}
}
//按學號輸出
voidList_printById(List*lList)
{
intiId;
id:
printf("%s ","請輸入學號,如果要退出,請輸入0:");
scanf("%d",&iId);
//如果輸入的是0退出循環
if(iId==0)
return;
//得到頂部節點指針
Node*nNode=lList->nTop;
inti,iSize=lList->iSize;
for(i=0;i<iSize;i++)
{
nNode=nNode->nDown;
if(nNode->iId==iId)
{
//輸出學號
printf("學號:%d ",nNode->iId);
//輸出班級
printf("班級:%s ",nNode->pcClass);
//輸出姓名
printf("姓名:%s ",nNode->pcName);
//輸出數學成績
printf("數學:%.1f ",nNode->fMath);
//輸出英語成績
printf("英語:%.1f ",nNode->fEng);
//輸出計算機成績
printf("計算機:%.1f ",nNode->fCmp);
//輸出平均成績
printf("平均分:%.2f ",nNode->fAver);
return;
}
}
printf("%s ","沒有此學生的記錄,請重新輸入:");
gotoid;
}
//按姓名輸出
voidList_printByName(List*lList)
{
characName[32];
name:
printf("%s ","請輸入姓名,如果要退出,請輸入NULL:");
scanf("%s",&acName[0]);
//如果輸入的是NULL退出循環
if((acName[0]=='N')&&(acName[1]=='U')&&(acName[2]=='L')&&(acName[3]=='L'))
return;
//得到頂部節點指針
Node*nNode=lList->nTop;
inti,iSize=lList->iSize;
for(i=0;i<iSize;i++)
{
nNode=nNode->nDown;
if(strCmp(nNode->pcName,acName))
{
//輸出學號
printf("學號:%d ",nNode->iId);
//輸出班級
printf("班級:%s ",nNode->pcClass);
//輸出姓名
printf("姓名:%s ",nNode->pcName);
//輸出數學成績
printf("數學:%.1f ",nNode->fMath);
//輸出英語成績
printf("英語:%.1f ",nNode->fEng);
//輸出計算機成績
printf("計算機:%.1f ",nNode->fCmp);
//輸出平均成績
printf("平均分:%.2f ",nNode->fAver);
return;
}
}
printf("%s ","沒有此學生的記錄,請重新輸入:");
gotoname;
}

main.c

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include"list.h"
#include"oper.h"

intmain(void)
{
//創建鏈表
List*lList=List_new();
intiMenu=0;
mainMenu:
iMenu=menu("**************************************************************************
1------添加記錄2------查詢記錄3------排序記錄4------刪除記錄
5------修改記錄6------分析記錄7------輸出記錄8------退出系統
**************************************************************************
請輸入選項所對應的數字: ");
switch(iMenu)
{
case1:
//添加記錄
addRec(lList);
gotomainMenu;
case2:
//查詢記錄
srchRec(lList);
gotomainMenu;
case3:
//排序記錄
sortRec(lList);
gotomainMenu;
case4:
//刪除記錄
delRec(lList);
gotomainMenu;
case5:
//修改記錄
modRec(lList);
gotomainMenu;
case6:
//分析記錄60.0是及格線
analRec(lList,60.0);
gotomainMenu;
case7:
//輸出記錄
oputRec(lList);
gotomainMenu;
case8:
//退出系統
break;
default:
printf("%s ","您輸入的選項不存在,請重新輸入。");
gotomainMenu;
}
//刪除鏈表
List_delete(lList);
return0;
}

代碼結束。

『拾』 C語言大作業求幫助

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

structscore_record
{
charID[10];
charclass[10];
charname[10];
intc_score;
};

voidappend(FILE*fp)
{
structscore_recordsr;
printf(" 請輸入學生的學號,班級,姓名和C語言成績: ");
scanf("%s%s%s%d",&sr.ID,&sr.class,&sr.name,&sr.c_score);
fseek(fp,0,SEEK_END);
fwrite((void*)&sr,sizeof(sr),1,fp);
}

voidsearch(FILE*fp)
{
structscore_recordsr;
charkey[10];

printf(" 請輸入要查詢的學生學號或姓名:");
scanf("%s",key);
fseek(fp,0,SEEK_SET);
while(fread(&sr,sizeof(sr),1,fp)==1){
if(strcmp(sr.ID,key)==0||strcmp(sr.name,key)==0){//found
printf("%s的C語言成績是:%d ",sr.name,sr.c_score);
return;
}
}
printf("未找到學號或姓名為%s的學生 ",key);
}

voipdate(FILE*fp)
{
structscore_recordsr;
charkey[10];

printf(" 請輸入要修改成績的學生學號或姓名:");
scanf("%s",key);
fseek(fp,0,SEEK_SET);
while(fread(&sr,sizeof(sr),1,fp)==1){
if(strcmp(sr.ID,key)==0||strcmp(sr.name,key)==0){//found
printf("%s的C語言原成績是:%d ",sr.name,sr.c_score);
printf("%s的C語言成績要修改為:");
scanf("%d",&sr.c_score);
fseek(fp,0-sizeof(sr),SEEK_CUR);
fwrite(&sr,sizeof(sr),1,fp);
return;
}
}
printf("未找到學號或姓名為%s的學生 ",key);
}

voiddisplay(FILE*fp)
{
structscore_recordsr;
//輸出60以下的學生信息
printf(" 60分以下的學生: ");
printf("學號 班級 姓名 成績 ");
fseek(fp,0,SEEK_SET);
while(fread(&sr,sizeof(sr),1,fp)==1){
if(sr.c_score<60)
printf("%s %s %s %d ",sr.ID,sr.class,sr.name,sr.c_score);
}
printf("80-90分的學生: ");
printf("學號 班級 姓名 成績 ");
fseek(fp,0,SEEK_SET);
while(fread(&sr,sizeof(sr),1,fp)==1){
if(sr.c_score>=80&&sr.c_score<90)
printf("%s %s %s %d ",sr.ID,sr.class,sr.name,sr.c_score);
}
printf("90分以上的學生: ");
printf("學號 班級 姓名 成績 ");
fseek(fp,0,SEEK_SET);
while(fread(&sr,sizeof(sr),1,fp)==1){
if(sr.c_score>=90)
printf("%s %s %s %d ",sr.ID,sr.class,sr.name,sr.c_score);
}
}

main()
{
charcmd;
FILE*fp;
fp=fopen("c_score.dat","rwb+");
if(fp==NULL){//文件不存在,就創建一個
fp=fopen("c_score.dat","wb+");
if(fp==NULL){
printf("不能打開文件c_score.dat ");
return-1;
}
}

while(1){
printf(" C語言成績記錄薄,查詢成績請按's',添加成績記錄請按'a',修改成績請按'u',顯示成績請按'd',結束請按'q':");
cmd=getch();
switch(cmd){
case's':
search(fp);
break;
case'a':
append(fp);
break;
case'u':
update(fp);
break;
case'd':
display(fp);
break;
case'q':
fclose(fp);
return0;
default:
printf("輸入錯誤,請重新輸入 ");
break;
}
}
}