當前位置:編程學習大全網 - 源碼下載 - C語言程序設計 鏈表的綜合操作(急)

C語言程序設計 鏈表的綜合操作(急)

壹、課程設計與目的

根據課堂講授內容,學生做相應的自主練習,消化課堂所講解的內容;通過調試典型例題或習題積累調試C程序的經驗;通過完成輔導教材中的編程題,逐漸培養學生的編程能力、用計算機解決實際問題的能力。

二、課程設計基本要求

1、用數據結構的方法設計出的學生信息管理系統,能實現對學生信息的簡單管理。

2、具體要求:

建立壹個若幹學生的信息登記表,每個學生的信息包括:學號、姓名、性別、成績和系,建立壹個管理系統。

程序運行時顯示壹個菜單形式,例如

**********學生信息管理系統**********

| 1. 輸入信息 |

| 2. 顯示所有信息|

| 3. 信息按學號排序|

| 4. 插入壹條記錄|

| 5. 刪除壹條記錄|

| 6. 查找 |

| 7. 修改壹條記錄 |

| 8. 退出 |

其中:

(1)輸入若幹條記錄

(2)顯示所有記錄

(3)按學號排序

(4)插入壹些記錄

(5)按學號查找,刪除壹條記錄

(6)查找並顯示壹條記錄

(7)修改壹條記錄

(8)退出程序

三、系統功能和結構

1、系統的功能

1設計壹個簡單學生信息管理系統,用戶可以通過系統簡單的管理學生信息。

2設計出壹個菜單可以讓用戶選擇所執行的內容。

3建立單結構體,輸入學生的信息(學號、姓名和、性別、系和成績)。

4根據單結構體的特點采用冒泡法以總分為標準排序學生信息。

5根據用戶輸入的學號信息,固定的查詢學生的詳細信息。

6根據用戶的需求刪除或者添加某學生的信息。

2、概要設計

主要數據結構描述

typedef struct student //定義結構類型

{

char num[15]; //學號

char name[20]; //姓名

char sex; //性別

int score; //成績

char sdept[10]; //系

} ;

student stu[100]; //結構體數組變量

算法分析及程序流程圖

該項目劃分為7個模塊加退出,主函數可以分別調用這些模塊,然後通過個模塊來實現各種需要的功能。

四、程序如何實現

模塊詳細設計

根據上面的流程圖,下面分析每個模塊具體的功能,包括每個模塊的參數和得出的結果

函數名 int Input(student stu[],int n) //輸入信息

入口參數 無

返回值 無

模塊功能 建立單結構體並賦值,即錄入學生的信息

模塊1

函數名 void Display(student stu[],int n) //顯示所有信息

入口參數 無

返回值 無

模塊功能 用於顯示和方便查找學號的學生成績

模塊2

函數名 void Sort_by_num(student stu[],int n) //對輸入的信息按學號排序

入口參數 無

返回值 無

模塊功能 用於對學生按學號排序便於查看

模塊3

函數名 int Insert_a_record(student stu[],int n) //插入壹些記錄

入口參數 無

返回值 無

模塊功能 用於追加新的學生信息

模塊4

函數名 int Delete_a_record(student stu[],int n) //查找,刪除壹個記錄

入口參數 無

返回值 無

模塊功能 用於刪除學生壹些信息

模塊5

函數名 void Query_a_record(student stu[],int n) //查找並顯示壹個記錄

入口參數 無

返回值 無

模塊功能 用於查找並顯示壹個記錄

模塊6

函數名 void Replace_a_record(student stu[],int n) //按學號查找修改

入口參數 無

返回值 無

模塊功能 按學號查找並修改壹個學生信息

模塊7

函數名 exit(8)

入口參數 無

返回值 無

模塊功能 退出應用程序

模塊8

五、程序源代碼

程序正文部分

#include<stdio.h>

#include<stdlib.h>

#include<ctype.h>

#include<string.h>

typedef struct student //定義結構類型

{

char num[15]; //學號

char name[20]; //姓名

char sex; //性別

int score; //成績

char sdept[10]; //系

} ;

student stu[100]; //結構體數組變量

int menu_select() //菜單函數聲明

{

char c;

do{

system("cls"); /*運行前清屏*/ ;

printf("\t\t**********學生信息管理系統**********\n"); /*菜單選擇*/

printf("\t\t | 1. 輸入信息 |\n");

printf("\t\t | 2. 顯示所有信息|\n");

printf("\t\t | 3. 信息按學號排序|\n");

printf("\t\t | 4. 插入壹條記錄|\n");

printf("\t\t | 5. 刪除壹條記錄|\n");

printf("\t\t | 6. 查找 |\n");

printf("\t\t | 7. 修改壹條記錄 |\n");

printf("\t\t | 8. 退出 |\n");

printf("\t\t************************************\n");

printf("\t\t\t 妳的選擇是(1-8):");

c=getchar(); //妳的選擇c

}while(c<'1'||c>'8');

return(c-'0');

}

int Input(student stu[],int n) //輸入信息

{ int i=0;

char more;

while(more!='n'&&more!='N')

{printf("\t\t\t 請輸入學生學號:");

scanf("\t\t\t %s",&stu[n+i].num);

printf("\t\t\t 請輸入學生姓名:");

scanf("\t\t\t %s",&stu[n+i].name);

printf("\t\t\t 請輸入學生性別:");

scanf("\t\t\t %c",&stu[n+i].sex);

printf("\t\t\t 請輸入學生成績:");

scanf("\t\t\t %d",&stu[n+i].score);

printf("\t\t\t 請輸入學生所在系:");

scanf("\t\t\t %s",&stu[n+i].sdept);

printf("\t\t\t 您有更多信息要輸入嗎?Y/N:");

scanf("\t\t\t %c",&more);

i++;

}return(n+i);

}

void Display(student stu[],int n) //顯示所有信息

{ int i;

printf(" ---------------------------------------------------------------\n"); /*格式頭*/

printf(" | 學 號 | 姓 名 | 性別 | 成績 | 所在系 |\n");

printf(" ---------------------------------------------------------------\n");

for(i=1;i<=n;i++)

{printf(" | %-15s| %-11s| %-5c| %-6d| %-12s|\n",stu[i-1].num,stu[i-1].name,

stu[i-1].sex,stu[i-1].score,stu[i-1].sdept );

printf(" ---------------------------------------------------------------\n"); //分格行

}

printf("\t\t\t");

system("pause");

}

void Sort_by_num(student stu[],int n) //對輸入的信息按學號排序

{ int i,j;

char l[15],t[20],q,k[10];

int p;

for(i=0;i<=n-1;i++) //起泡法排序

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

if(strcmp(stu[j].num,stu[j+1].num)>0)

{ l=stu[j].num;

stu[j].num=stu[j+1].num;

stu[j+1].num=l;

t=stu[j].name;

stu[j].name=stu[j+1].name;

stu[j+1].name=t;

q=stu[j].sex;

stu[j].sex=stu[j+1].sex;

stu[j+1].sex=q;

p=stu[j].score;

stu[j].score=stu[j+1].score;

stu[j+1].score=p;

k=stu[j].sdept;

stu[j].sdept=stu[j+1].sdept;

stu[j+1].sdept=k;

}

}

int Insert_a_record(student stu[],int n) //插入壹些記錄

{ int i=0;

char more;

while(more!='n'&&more!='N')

{printf("\t\t\t 請輸入學生學號:");

scanf("\t\t\t %s",&stu[n+i].num);

printf("\t\t\t 請輸入學生姓名:");

scanf("\t\t\t %s",&stu[n+i].name);

printf("\t\t\t 請輸入學生性別:");

scanf("\t\t\t %c",&stu[n+i].sex);

printf("\t\t\t 請輸入學生成績:");

scanf("\t\t\t %d",&stu[n+i].score);

printf("\t\t\t 請輸入學生所在系:");

scanf("\t\t\t %s",&stu[n+i].sdept);

Sort_by_num(stu, n);

printf("\t\t\t Insert Successed!\n"); //插入成功

printf("\t\t\t 您有更多信息要輸入嗎?Y/N:");

scanf("\t\t\t %c",&more);

i++;

}return(n+i);

}

int Delete_a_record(student stu[],int n) //查找,刪除壹個記錄

{ char l[15];

int i=0, j;

printf("\t\t\t 請輸入學生學號:"); //按學號查找

scanf("\t\t\t %s",l);

while(strcmp(stu[i].num,l)!=0 && i<n)i++; //查找判斷

if(i==n)

{printf("\t\t\tnot find!\n"); //查找失敗

return(n);}

for(j=i;j<n-1;j++) //刪除操作

{ strcpy(stu[j].num,stu[j+1].num);

strcpy(stu[j].name,stu[j+1].name);

stu[j].sex=stu[j+1].sex;

stu[j].score=stu[j+1].score;

strcpy(stu[j].sdept,stu[j+1].sdept);

}

printf("\t\t\t Delete Successed!\n"); //刪除成功

return(n-1) ;

}

void Query_a_record(student stu[],int n) //查找並顯示壹個記錄

{ char l[15];

int i=0;

printf("\t\t\t 請輸入學生學號:"); //按學號查找

scanf("\t\t\t %s",l);

while(strcmp(stu[i].num,l)!=0 && i<n)i++; //查找判斷

if(i==n)

{ printf("\t\t\tnot find!\n"); //查找失敗

return;

}

printf("\t\t\t 學生的學號:%s\n",stu[i].num); //輸出該學生信息

printf("\t\t\t 學生的姓名:%s\n",stu[i].name);

printf("\t\t\t 學生的性別:%c\n",stu[i].sex);

printf("\t\t\t 學生的成績:%d\n",stu[i].score);

printf("\t\t\t 學生所在系:%s\n",stu[i].sdept);

}

void Replace_a_record(student stu[],int n) //按學號查找修改

{

char choice,l[15];

int i=0;

printf("\t\t\t 請輸入學生學號:"); //按學號查找

scanf("\t\t\t %s",l);

while(strcmp(stu[i].num,l)!=0 && i<n)i++; //查找判斷

if(i==n)

{printf("\t\t\tnot find!\n"); //查找失敗

return;}

printf("\t\t\t請選擇您要修改的學生的信息內容:\n");

printf("\t\t\t (1)修改學生姓名:\n");

printf("\t\t\t (2)修改學生性別\n:");

printf("\t\t\t (3)修改學生成績:\n");

printf("\t\t\t (4)修改學生所在系:\n");

printf("\t\t\t (5)取消 請按 5 \n");

printf("\t\t\t 請輸入您的選擇:\n");

scanf("%d", &choice);

switch(choice)

{

case 1:

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

scanf("%d", stu[i].name);

break;

case 2:

printf("\t\t\t 請輸入新性別:\n");

scanf("%s", stu[i].sex);

printf("\t\t\t");

system("pause");

break;

case 3:

printf("\t\t\t 請輸入新成績:\n");

scanf("%s", stu[i].score);

printf("\t\t\t");

system("pause");

break;

case 4:

printf("\t\t\t 請輸入新的所在系:\n");

scanf("%s", stu[i].sdept);

printf("\t\t\t");

system("pause");

break;

case 5:

printf("您選擇了取消,Bye-Bye!\n") ;

exit;

}

}

void main() //主函數

{

int n=0;

for(;;) //相當於while(1)語句,不設初值,認為表達式2為真值,循

//環變量不增值,無終止的執行循環

{

switch(menu_select())

{

case 1:

printf("\t\t\tInput Records\n"); //輸入若幹條記錄

n=Input(stu,n);

break;

case 2:

printf("\t\t\tDisplay All Records\n"); //顯示所有記錄

Display(stu,n);

break;

case 3:

printf("\t\t\tSort\n");

Sort_by_num(stu,n); //按學號排序

printf("\t\t\tSort Suceessed!\n");

printf("\t\t\t");

system("pause");

break;

case 4:

printf("\t\t\tInsert a Record\n");

n=Insert_a_record(stu,n); //插入壹些記錄

printf("\t\t\t");

system("pause");

break;

case 5:

printf("\t\t\tDelete a Record\n");

n=Delete_a_record(stu,n); //按姓名查找,刪除壹條記錄

printf("\t\t\t");

system("pause");

break;

case 6:

printf("\t\t\tQuery\n");

Query_a_record(stu,n); //查找並顯示壹個記錄

printf("\t\t\t");

system("pause");

break;

case 7:

printf("\t\t\treplace\n"); //修改壹條信息

Replace_a_record(stu,n);

printf("\t\t\t");

system("pause");

break;

case 8:

printf("\t\t\tHave a Good Luck,Bye-bye!\n"); //結束程序

printf("\t\t\t");

system("pause");

exit(8);

}

} }

六、 程序的運行與實現

(1)輸入若幹條記錄

(2)顯示所有記錄

(3)按學號排序

(4)插入壹些記錄

(5)按學號查找,刪除壹條記錄

(6)查找並顯示壹條記錄

(7)修改壹條記錄

(8)退出程序

  • 上一篇:股市諺語俗語有哪些?
  • 下一篇:什麽是大數據分析Hadoop?
  • copyright 2024編程學習大全網