當前位置:編程學習大全網 - 遊戲軟體 - c語言程序設計題目

c語言程序設計題目

第壹種:

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include<string.h>

struct student{

int id;

char name[10];

int age;

char sex[10];

char birthady[20];

int tel;

char nativeplace[50];

}st[50];

int i=0;

void shuru() {

char a;

do{

printf("\n請輸入學號:");

scanf("%d",&st[i].id);

fflush(stdin);

printf("\n請輸入姓名:");

gets(st[i].name);

printf("\n") ;

printf("請輸入年齡:");

scanf("%d",&st[i].age);

fflush(stdin);

printf("\n請輸入姓別:");

gets(st[i].sex);

fflush(stdin);

printf("\n請輸入生日:");

gets(st[i].birthady);

printf("\n請輸入電話:");

scanf("%d",&st[i].tel);

fflush(stdin);

printf("\n請輸入籍貫:");

gets(st[i].nativeplace);

printf("\n是否繼續輸入另外壹個學生信息?(y/n)");

fflush(stdin);

a=getchar();

i++;

}while(a=='y' && i<=50);

}

void xianshi()

{

int j;

printf("\t學號\t姓名\t年齡\t性別\t生日\t\t電話\t籍貫\n");

for(j=0;j<i;j++)

printf("\t%d\t%s\t%d\t%s\t%s\t%d\t%s\n",

st[j].id,st[j].name,st[j].age,st[j].sex,st[j].birthady,st[j].tel,st[j].nativeplace);

}

void paixu() //按年齡從大到小排序函數

{

int j,k;

int temp;

for(j=0;j<i;j++)

{

for(k=0;k<i-1-j;k++)

{

if(st[k].age<st[k+1].age)

{

temp=st[k].age;

st[k].age=st[k+1].age;

st[k+1].age=temp;

}

}

}

xianshi(); //排序後輸出

}

void chazhao()

{

int m;

char name[20],b;

do

{

printf("\n請輸入想查找的學生姓名:");

fflush(stdin);

gets(name);

for(m=0;m<i;m++)

{

if(strcmp(name,st[m].name)==0)

{

printf("\n\t您查找的學生在第%d個位置找到了!!!\n",m+1);

break;

}

}

if(m>=20)

printf("\n\t沒有找到這個學生!!!\n");

else

{

printf("\t學號\t姓名\t年齡\t性別\t生日\t\t電話\t籍貫\n");

printf("\t%d\t%s\t%d\t%s\t%s\t%d\t%s\n",

st[m].id,st[m].name,st[m].age,st[m].sex,st[m].birthady,st[m].tel,st[m].nativeplace);

}

printf("\n是否查找另壹個學生的信息?(y/n)");

fflush(stdin);

b=getchar();

}while(b=='y');

}

void shanchu()

{

char name[20],c;

int a,b;

do

{

printf("\n請輸入要刪除的學生姓名:\n");

fflush(stdin);

gets(name);

for(a=0;a<i;a++)

{

if(strcmp(name,st[a].name)==0)

break;

}

for(b=a;b<i;b++)

st[b]=st[b+1];

if(a>i)

printf("\t沒有找到這個學生!!!\n");

else

{

i--;

xianshi();

}

printf("\n是否繼續刪除另壹個學生信息?(y/n) ");

fflush(stdin);

c=getchar();

}while(c=='y');

}

void charu()

{

shuru();

paixu();

}

void main() //主函數

{

int change;

do{

system("cls");

printf("============================學生信息管理系統===================================\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");

fflush(stdin);

printf("\t\t請輸入功能選項:");

scanf("%d",&change);

switch(change)

{

case 1:

shuru(); break;

case 2:

xianshi(); break;

case 3:

chazhao(); break;

case 4:

shanchu(); break;

case 5:

charu(); break;

case 6:

break;

}

getch();

}while(change!=6);

}

第二種

#include<stdio.h>

#include<conio.h>

#include<string.h>

typedef struct STUDENT

{

char studentNumber[10];/*學生學號*/

char studentName[20];/*學生姓名*/

char studentSEX[10];/*學生性別*/

char className[20];/*班級名稱*/

float mark1;/*第1門成績*/

float mark2;/*第2門成績*/

float mark3;/*第3門成績*/

float mark4;/*第4門成績*/

float mark5;/*第5門成績*/

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;/*用於接受用戶的選擇*/

/*主函數*/

void 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%s%f%f%f",p->studentNumber,p->studentSEX,p->studentName,p->className,&(p->mark1),&(p->mark2),&(p->mark3),&(p->mark4),&(p->mark5))>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<10;i++)

p->studentSEX[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->mark4=0.0;

p->mark5=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->studentSEX);

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));

printf("請輸入第4門成績:\n");

scanf("%f",&(t->mark4));

printf("請輸入第5門成績:\n");

scanf("%f",&(t->mark5));

}

/************************************

函數功能:在鏈表的結尾處增加壹個結點

************************************/

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班級\t成績1\t成績2\t成績3\t成績4\t成績5\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班級\t成績1\t成績2\t成績3\t成績4\t成績5\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->studentSEX);

printf("%s\t",t->className);

printf("%.2f\t",t->mark1);

printf("%.2f\t",t->mark2);

printf("%.2f\t",t->mark3);

printf("%.2f\t",t->mark4);

printf("%.2f\t",t->mark5);

printf("%.2f\t",t->mark1+t->mark2+t->mark3+t->mark4+t->mark5);

printf("%.2f\t\n",(t->mark1+t->mark2+t->mark3+t->mark4+t->mark5)/5);

}

/************************************

函數功能:根據用戶輸入的學號刪除該學生

************************************/

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班級\t成績1\t成績2\t成績3\t成績4\t成績5\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,mark4,mark5;

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);

printf("請輸入新的第4門成績:\n");

scanf("%f",&mark4);

printf("請輸入新的第5門成績:\n");

scanf("%f",&mark5);

p->mark1=mark1;

p->mark2=mark2;

p->mark3=mark3;

p->mark4=mark4;

p->mark5=mark5;

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,mark4,mark5;

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);

printf("請輸入新的第4門成績:\n");

scanf("%f",&mark4);

printf("請輸入新的第5門成績:\n");

scanf("%f",&mark5);

p->mark1=mark1;

p->mark2=mark2;

p->mark3=mark3;

p->mark4=mark4;

p->mark5=mark5;

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 %s %f %f %f %f %f\n",p->studentNumber,p->studentName,p->studentSEX,p->className,p->mark1,p->mark2,p->mark3,p->mark4,p->mark5);

p=p->next;

}

fclose(fp);

}

/************************************

函數功能:顯示優秀和不及格學生成績

************************************/

void DesplayMarkSegment(void)

{

STUDENT *p;

int count=0;

p=headLink->next;

printf("60分以下(不及格)的學生成績如下:\n");

printf("學號\t姓名\t性別\t班級\t成績1\t成績2\t成績3\t成績4\t成績5\t總成績\t平均成績\n\n");

while(p)

{

if((6>((int)(p->mark1/10)))||(6>((int)(p->mark2/10)))||(6>((int)(p->mark3/10)))||(6>((int)(p->mark4/10)))||(6>((int)(p->mark5/10))))/*只要有壹科不及格就認為該生不及格*/

{

count++;

DesplayOneNode(p);

}

p=p->next;

}

printf("不及格的學生壹***有%d人\n",count);

p=headLink->next;

printf("成績優秀的學生成績如下:\n");

printf("學號\t姓名\t性別\t班級\t成績1\t成績2\t成績3\t成績4\t成績5\t總成績\t平均成績\n\n");

count=0;

while(p)

{

if((8<=((int)(p->mark1/10)))&&(8<=((int)(p->mark2/10)))&&(8<=((int)(p->mark3/10)))&&(8<=((int)(p->mark4/10)))&&(8<=((int)(p->mark5/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+q->mark4+q->mark5)>(p->mark1+p->mark2+p->mark3+p->mark4+p->mark5))

{

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;

exchange.mark4=q->mark4;

exchange.mark5=q->mark5;

strcpy(q->studentNumber,p->studentNumber);/*再復制p結點信息到q*/

strcpy(q->studentName,p->studentName);

strcpy(q->studentSEX,p->studentSEX);

strcpy(q->className,p->className);

q->mark1=p->mark1;

q->mark2=p->mark2;

q->mark3=p->mark3;

q->mark4=p->mark4;

q->mark5=p->mark5;

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;

p->mark4=exchange.mark4;

p->mark5=exchange.mark5;

}

q=q->next;

}

r=r->next;

}

OutputInformation();

}

我比較傾向於第二種,因為是自己調試的,呵呵~~

妳只要把"成績"改成妳需要的其他信息就OK了~~

  • 上一篇:中性筆和簽字筆壹樣嗎?
  • 下一篇:whatthefack是什麽意思
  • copyright 2024編程學習大全網