程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言問答 >> C語言問題!!麻煩下!期末作業!求大俠

C語言問題!!麻煩下!期末作業!求大俠

編輯:C語言問答

C語言問題!!麻煩下!期末作業!求大俠

100

  設某班有n位同學,每位同學的數據包括以下內容:學號(字符串)、姓名(字符串)、數學成績(字符串)、程序設計成績(字符串)。設計程序完成以下五項功能:新建數據檔案、添加數據、刪除數據、對輸入的數據進行排序和查詢。 注: 采用模塊化程序設計思想對系統進行設計; 學生的數據要求用文件保存; 學生的學號作為關鍵字段,不能相同,姓名可以相同。 要求使用結構體,鏈或數組等實現。      【要求】 1.程序運行時,首先顯示主菜單如下: 1.新建數據 2.添加數據 3.刪除數據 4.排序 5.查詢 6.退出 請輸入序號選擇相應操作   用戶輸入序號後,程序進行相應操作。

一、文件名規定 1 數據庫文件名:      students.txt(文本文件) 2 數學成績排序文件名:sxcj.txt(文本文件) 3 程序設計成績排序名:cxsj.txt(文本文件) 二、記錄結構和全局變量 typedef  struct {                 char xh[12];       /*學號*/                 char xm[12];      /*姓名*/                 char sxcj[5];      /*數學成績*/                char cxsj[5];      /*程序設計成績*/                 char zf[5];        /*總分*/                 struct STD *next   /*指向下條記錄*/                 struct STD *prev    /*指向上條記錄*/ }STD STD *head=NULL;    /*鏈表頭指針,定義為全局變量*/ STD *tail=NULL;     /*鏈表尾指針,定義為全局變量*/ STD *current=NULL;  /*鏈表當前結點指針,定義為全局變量*/ 補充:[email protected] 謝謝哈 大俠 謝謝

最佳回答:

我只會一點點框架,還有很多不會做了

#include "stdio.h"

struct student {

unsigned long num; /*學號*/

char name[20]; /*姓名*/

int score1; /*數學成績*/

 int score2; /*程序設計成績*/

 int total; /*總分*/

int mc; /*名次*/ };

 struct student a[10];

 void enter(struct student a[],int n) /*輸入學生基本信息*/

 { int i,j;

printf("請輸入學生信息(學號 姓名 數學成績 程序設計成績):\n");

for(i=0;i<n;i++) { scanf("%ld%s%d%d",&a[i].num,&a[i].name,&a[i].score1,&a[i].score2);

a[i].total=0;

for(j=0;j<2;j++) a[i].total=a[i].score1+a[i].score2; } } /*用選擇法按總分從高到低排序*/

void selectsort(struct student a[],int n)

{ int i,j,p; struct student temp; for(i=0;i<n-1;i++) { p=i; for(j=i+1;j<n;j++) if(a[j].total>a[p].total)p=j; if(p!=i) { temp=a[i]; a[i]=a[p]; a[p]=temp; } } }

void print(struct student a[],int n) /*輸出學生信息*/

{ int i,j,ma=1; printf("\n名次表:\n");

printf("學號 姓名 數學成績 程序設計成績 總分 \n");

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

 { a[i].mc=ma;

printf("%ld %s %d %d %d\n",a[i].num,a[i].name,a[i].score1,a[i].score2,a[i].total ); ma++; } }

void find(unsigned long m,struct student a[],int n) /*查詢*/

{ int i; for(i=0;i<n;i++) if(strcmp(m,a[i].num)==0) { printf("\n The student`s message :\n");

printf("學號:%ld 姓名:%s 數學成績:%d 程序設計成績:%d 總分:%d \n",a[i].num,a[i].name,a[i].score1,a[i].score2,a[i].total); } }

 void order(struct student a[],int n)

{ int h; printf("數學成績排序");

printf("程序設計成績排序");

printf("總分排序");

printf("返回主菜單");

printf("輸入序號:");

scanf("%d",h);

switch(h)

{ case 1:enter(a,n);

case 2:

case 3:

case 4:selectsort(a,n);

case 5:find(a,n);

 case 6:quit; } }

 main() { int n,m; unsigned long ms;

printf("請輸入該寢室學生人數:");

scanf("%d",&n);

printf("/*********XX成績信息管理系統****/\n");

printf("1)新建數據\n");

printf("2)添加數據\n");

printf("3)刪除數據\n");

printf("4)排序\n");

printf("5)查詢\n");

printf("6)退出(exit)\n");

printf("輸入序號:");

scanf("%d",m);

switch(m)

{ case 1:enter(a,n); case 2: case 3: case 4:order(a,n); case 5:finds(a,n); case 6: }

 printf("請輸入要查詢的學生學號:");

scanf("%d",&ms); find(ms,a,n); selectsort(a,n); print(a,n); }  

 

 

 

 

來自 http://zhidao.baidu.com/question/28565924.html

追問:
謝謝! 有些錯誤
回答:
沒辦法哦,你那題目太大了...人家只能短時間寫出這麼些了
追問:
不知道能不能行 還是謝謝你!
回答:

我自己也寫了一些,和你的題目稍有不同。。因為我對鏈表很不熟悉啊。。只會結構體了。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
struct student
{               
char xh[12];       /*學號*/                
char xm[12];      /*姓名*/                
char sxcj[3];      /*數學成績*/               
char cxsj[3];      /*程序設計成績*/                
char zf[3];        /*總分*/                
}STD[N];

FILE *datab,*sxcjb,cxsjb;
int i=0;

void adddata()
{char choice='y';
datab=fopen("student.txt","a+");
while(choice=='y'||choice=='Y')
{
 printf("學號:");
 gets(STD[i].xh);gets(STD[i].xh);
 printf("\n姓名:");
 gets(STD[i].xm);
 printf("\n數學成績:");
 gets(STD[i].sxcj);
 printf("\n程序設計成績:");
 gets(STD[i].cxsj);
 itoa((atoi(STD[i].cxsj)+atoi(STD[i].sxcj)),STD[i].zf,10);
fwrite(&STD[i],sizeof(struct student),1,datab);
i++;
printf("是否要輸入下個?\n");
scanf("%s",&choice);
}
fclose(datab);
return;
};


void deldata()
{FILE *fp;
char delxh[20];
struct student del;
datab=fopen("student.txt","r+");
fp=fopen("student1.txt","w+");
printf("請輸入要刪除的學生學號:");
gets(delxh);gets(delxh);
rewind(datab);
do
{
fread(&STD[i],sizeof(struct student),1,datab);
if(strcmp(STD[i].xh,delxh)!=0)
fwrite(&STD[i],sizeof(struct student),1,fp);
}while(!feof(datab));
fclose(fp);
fclose(datab);/*
datab=fopen("student.txt","w+");
fp=fopen("student1.txt","r");
while(!feof(fp))
{fread(&STD[i],sizeof(struct student),1,fp);
fwrite(&STD[i],sizeof(struct student),1,datab);
}
fclose(fp);
fclose(datab);*/
return;
};
/*void sort()
void find()
void print()*/


void main()
{
  char ch;
  do{
 printf("---------------歡迎進入學生管理系統!--------------\n");
            printf(" \t1:<添加數據>\n");
            printf(" \t2:<刪除數據>\n");
            printf(" \t3:<數據排序>\n");
            printf(" \t4:<數據查詢>\n");
            printf(" \t0:<退出>\n");
            printf(" \t請輸入0--4,其他輸入非法!\n");
scanf("%s",&ch);
switch(ch)
{case'1':adddata();break;
 case'2':deldata();break;/*
else if(ch==3)sort();
else if(ch==4)find();
else if(ch==5)print();*/
case'0':exit(0);
default:break;
}
}
while(ch!='0');
}
只寫完2個函數,實在沒時間啊,這個題目太大了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved