namespace Hw1_Hashing
{
public class Program
{
static List PhoneData1 = new List(); //arraylist for phone number
static List PersonData1 = new List(); //arraylist for person
static Hashtable Hash = new Hashtable();
static string path = @"PhoneBook1.txt";
static void Main(string[] args)
{
try
{
readData();
char x;
bool isExit = false;
do
{
Console.Write("Phonebook - Input your command (h for help):");
string m = Console.ReadLine();
x = char.ToLower(m[0]);
switch (x)
{
case 'i': insert(); //func insert a phone number
break;
case 'd': delete(); //delete a phone number
break;
case 'm': modify(); //modify
break;
case 's':
{
search(); //search phone no
break;
}
case 'x':
{
isExit = true;
//write data to textfiles
writeData();
break;
}
case 'h':
{
help();
break;
}
default: break;
}
} while (!isExit);
}
catch (Exception ex)
{
Console.WriteLine("Program Error : " + ex.Message);
Console.Read();
}
}
static void insert()
{
bool m = false;
string x = string.Empty;
string newList = "The new list is:";
do
{
Console.Write("Enter a phone number to be inserted: ");
x = Console.ReadLine();
x = x.Trim();
int y = x.Length;
if (y > 10)
Console.WriteLine("Error - the number is too long");
else if (y < 10)
Console.WriteLine("Error - the number is too short");
else
{
m = true;
foreach (PhoneData item in PhoneData1)
{
if (String.Compare(item.PhoneNumber, x) == 0)
{
Console.WriteLine("Error - the phone number is already in this phone book.");
m = false;
}
}
}
} while (m == false);
Console.WriteLine("The list is:");
showList(null);
//Show for Enter input new person or not
Console.Write("Enter the person id to append the phone number or 'n' for new phone number :");
string inputNP = Console.ReadLine();
int no;
//if it new person
if ("nN".Contains(inputNP))
{
Console.Write("Enter the name (8 Characters maximum) :");
string inputName = Console.ReadLine();
while (inputName.Length > 8)
{
Console.Write("Error name is more that 8 Characters, Please Enter new name:");
inputName = Console.ReadLine();
}
//insert new name
PersonData p = new PersonData();
p.PersonNo = PersonData1.Count + 1;
p.Name = inputName;
p.CountPhoneNo++;
PersonData1.Add(p);
//insert new phone no. to list
PhoneData ph = new PhoneData();
ph.no = p.PersonNo;
ph.PhoneNumber = x;
ph.phoneOrder = 1;
PhoneData1.Add(ph);
//add key to hashtable
InsertHashTable(ph);
//print new list
Console.WriteLine(newList);
showList(null);
}
else if (int.TryParse(inputNP, out no) == true)
{
int noIndex = PersonData1.FindIndex(i => i.PersonNo == no);
//checking is it full 5 phone no for that person
//if it full show error and input the replace no for replace that phone no
if (PersonData1[noIndex].CountPhoneNo == 5)
{
Console.Write(PersonData1[noIndex].Name + " has 5 phone numbers already,"+Environment.NewLine+" enter replaced number or any key for cancel:");
string inputRC = Console.ReadLine();
int tryParseInputRC;
//if not cancel replace that phone no to another one
if (int.TryParse(inputRC, out tryParseInputRC))
{
//replace and remove key of that phone no. from hash table
//int indexperson = PersonData1.FindIndex(i => i.PersonNo == PersonData1[no].PersonNo);
PhoneData ph = new PhoneData();
ph.no = no;
int indexphone = PhoneData1.FindIndex(i => i.phoneOrder == tryParseInputRC);
ph.PhoneNumber = PhoneData1[indexphone].PhoneNumber;
ph.phoneOrder = tryParseInputRC;
PhoneData ph2 = new PhoneData();
ph2.no = ph.no;
ph2.PhoneNumber = x;
ph2.phoneOrder = ph.phoneOrder;
PhoneData1[indexphone] = ph2;
//delete hash table data
DeleteHashTable(ph);
//insert new hash table data
InsertHashTable(ph2);
//show new list
Console.WriteLine(newList);
showList(null);
}
}
else
{
Console.Write("Enter replaced number or 'n' for new phone number:");
string inputPHID = Console.ReadLine();
if ("nN".Contains(inputPHID))
{
//add new phone number and position
PhoneData ph = new PhoneData();
ph.phoneOrder = PersonData1[noIndex].CountPhoneNo + 1;
ph.no = no;
ph.PhoneNumber = x;
PhoneData1.Add(ph);
PersonData1[noIndex].CountPhoneNo++;
//increase phone item in person
int indexPer = PersonData1.FindIndex(i => i.PersonNo == no);
//insert phone no to hash table
InsertHashTable(ph);
}
else
{
int phoneN;
bool isNumberic = int.TryParse(inputPHID, out phoneN);
//ask to replace phone no.
if (phoneN 0)
{
int j = 0;
for (int i = 0; i < PhoneData1.Count; i++)
{
if (PhoneData1[i].phoneOrder == phoneN && PhoneData1[i].no == no)
{
j = i;
break;
}
}
string pp1;
string p1 = PhoneData1[j].PhoneNumber;
pp1 = p1;
p1 = p1.Substring(0, 3) + " " + p1.Substring(3, 3) + " " + p1.Substring(6, 4);
string p2 = x;
p2 = p2.Substring(0, 3) + " " + p2.Substring(3, 3) + " " + p2.Substring(6, 4);
Console.Write("Do you want to replace " + PersonData1[noIndex].Name + "'s contact " + p1 + " with " + p2 +Environment.NewLine+ " ('y' for yes, any key to cancel)? :");
string checkR = Console.ReadLine();
if ("yY".Contains(checkR))
{
//replace that phone no.
PhoneData ph1 = new PhoneData();
ph1.no = no;
ph1.PhoneNumber = x.Trim();
ph1.phoneOrder = phoneN;
PhoneData1[j] = ph1;
PhoneData ph2 = new PhoneData();
ph2.no = no;
ph2.PhoneNumber = pp1;
ph2.phoneOrder = phoneN;
//remove hash table about that phone no.
DeleteHashTable(ph2);
//insert new hash table of this phone no.
InsertHashTable(ph1);
}
}
else
{
//insert phone no in next position
PhoneData ph = new PhoneData();
ph.PhoneNumber = x;
ph.no = no;
เนมสเปซ Hw1_Hashing{ สาธารณะประเภทโปรแกรม { รายการแบบคง PhoneData1 =รายการใหม่(); arraylist หมายเลขโทรศัพท์ รายการแบบคง PersonData1 =รายการใหม่(); arraylist สำหรับบุคคล คง Hashtable แฮ = Hashtable() ใหม่ เส้นทางสายคง =แอท "PhoneBook1.txt" คงเป็นโมฆะหลัก (สตริงที่[]อาร์กิวเมนต์) { ลอง { readData() อักขระ x bool isExit = false ทำ { Console.Write ("สมุดโทรศัพท์ - ป้อนข้อมูลคำสั่ง (h สำหรับความช่วยเหลือ): "); สาย m = Console.ReadLine() x =อักขระ ToLower(m[0]) สวิตช์ (x) { กรณี 'i': insert() func แทรกหมายเลขโทรศัพท์ ทำลาย กรณีจะ ': delete (); ลบหมายเลขโทรศัพท์ ทำลาย กรณีกำลัง ': modify() ปรับเปลี่ยน ทำลาย กรณีของ ': { search() ค้นหาโทรศัพท์ไม่ ทำลาย } กรณี 'x': { isExit = true เขียนข้อมูลไปยัง textfiles writeData() ทำลาย } กรณี 'h': { help() ทำลาย } เริ่มต้น: ทำลาย } } ขณะ (! isExit); } จับ (ยกเว้นแฟนเก่า) { Console.WriteLine ("โปรแกรมข้อผิดพลาด: " + อดีต ข้อ); Console.Read() } } insert() คงเป็นโมฆะ { bool m = false สายอักขระ x =สาย ว่างเปล่า สตริ newList = "รายใหม่: "; ทำ { Console.Write ("ใส่หมายเลขโทรศัพท์ที่จะแทรก: "); x = Console.ReadLine() x = x.Trim() int y = x.Length ถ้า (y > 10) Console.WriteLine ("ข้อผิดพลาด - หมายเลขยาวเกินไป"); ถ้าที่อื่น (y < 10) Console.WriteLine ("ข้อผิดพลาด - หมายจะสั้นเกินไป"); อื่น { m = true foreach (PhoneData สินค้าใน PhoneData1) { ถ้า ((รายการ String.Compare PhoneNumber, x) == 0) { Console.WriteLine ("ข้อผิดพลาด - หมายเลขโทรศัพท์อยู่ในสมุดโทรศัพท์นี้"); m = false } } } } ขณะ (m == false); Console.WriteLine ("รายการ: "); showList(null) แสดงบุคคลใหม่ป้อนเข้า หรือไม่ Console.Write ("ป้อนรหัสบุคคลผนวกหมายเลขโทรศัพท์หรือเอ็นสำหรับหมายเลขโทรศัพท์ใหม่: "); สตริ inputNP = Console.ReadLine() int ไม่ ถ้าได้คนใหม่ ถ้า ("nN" Contains(inputNP)) { Console.Write ("ใส่ชื่อ (8 อักขระสูงสุด): "); สตริ inputName = Console.ReadLine() ในขณะที่ (inputName.Length > 8) { Console.Write ("มากว่า 8 ตัว กรุณาป้อนชื่อใหม่เป็นชื่อข้อผิดพลาด: "); inputName = Console.ReadLine() } ใส่ชื่อใหม่ PersonData p = PersonData() ใหม่ p.PersonNo = PersonData1.Count + 1 p.Name = inputName p.CountPhoneNo++ PersonData1.Add(p) ใส่โทรศัพท์มือถือใหม่ไม่ การแสดงรายการ PhoneData ph = PhoneData() ใหม่ ph.no = p.PersonNo ph PhoneNumber = x ph.phoneOrder = 1 PhoneData1.Add(ph) เพิ่มคีย์ hashtable InsertHashTable(ph) พิมพ์รายการใหม่ Console.WriteLine(newList) showList(null) } ถ้าที่อื่น (ของดอกเบี้ย TryParse(inputNP, out no) ==จริง) { int noIndex = PersonData1.FindIndex (ผม = > i.PersonNo ==ไม่); การตรวจสอบคือ มันเต็ม 5 โทรศัพท์สำหรับบุคคลที่ไม่มี ถ้ามันเต็มแสดงข้อผิดพลาด และเข้าแทนที่สำหรับ เปลี่ยนโทรศัพท์ที่ไม่ ถ้า (PersonData1 [noIndex] CountPhoneNo == 5) { Console.Write (PersonData1 [noIndex] ชื่อ + "มี already,"+Environment.NewLine+ หมายเลขโทรศัพท์ 5"ป้อนแทนเลขหรือคีย์ใด ๆ สำหรับการยกเลิก: "); สตริ inputRC = Console.ReadLine() int tryParseInputRC ถ้า ไม่ยกเลิกการแทนที่โทรศัพท์ไม่เป็นหนึ่ง ถ้า (ของดอกเบี้ย TryParse (inputRC ออก tryParseInputRC)) { แทน และเอาคีย์ที่โทรศัพท์ไม่ จากตารางแฮช int indexperson = PersonData1.FindIndex (ผม = > i.PersonNo == PersonData1 [ไม่] PersonNo); PhoneData ph = PhoneData() ใหม่ ph.no = no int indexphone = PhoneData1.FindIndex (ผม = > i.phoneOrder == tryParseInputRC); ph PhoneNumber = PhoneData1 [indexphone] PhoneNumber ph.phoneOrder = tryParseInputRC PhoneData ph2 = PhoneData() ใหม่ ph2.no = ph.no ph2 PhoneNumber = x ph2.phoneOrder = ph.phoneOrder PhoneData1 [indexphone] = ph2 ลบข้อมูลในตารางแฮ DeleteHashTable(ph) แทรกข้อมูลในตารางแฮใหม่ InsertHashTable(ph2) แสดงรายการใหม่ Console.WriteLine(newList) showList(null) } } อื่น { Console.Write (" Enter แทนหมายเลขหรือเอ็นสำหรับหมายเลขโทรศัพท์ใหม่: "); สตริ inputPHID = Console.ReadLine() ถ้า ("nN" Contains(inputPHID)) { เพิ่มหมายเลขโทรศัพท์ใหม่และตำแหน่ง PhoneData ph = PhoneData() ใหม่ ph.phoneOrder = PersonData1 [noIndex] CountPhoneNo + 1 ph.no = no ph PhoneNumber = x PhoneData1.Add(ph) PersonData1 [noIndex] CountPhoneNo ++ เพิ่มสินค้าโทรศัพท์คน int indexPer = PersonData1.FindIndex (ผม = > i.PersonNo ==ไม่); ใส่โทรศัพท์ไม่ให้ตารางแฮช InsertHashTable(ph) } อื่น { int phoneN bool isNumberic =ของดอกเบี้ย TryParse (inputPHID ออก phoneN); ขอให้แทนโทรศัพท์ไม่ ถ้า (phoneN < = PersonData1 [noIndex] CountPhoneNo และ & phoneN > 0) { int j = 0 สำหรับ (int ฉัน = 0 ฉัน < PhoneData1.Count; i ++) { ถ้า (PhoneData1 [i] .phoneOrder == phoneN & & PhoneData1 [i] รวด==ไม่มี) { j =ฉัน ทำลาย } } สตริ pp1 สตริ p1 = PhoneData1 [j] PhoneNumber pp1 = p1 p1 = p1 ด้วย (0, 3) + "" + p1 ด้วย (3, 3) + "" + p1 ด้วย (6, 4); สตริ p 2 = x p 2 = p 2 ด้วย (0, 3) + "" + p 2 ด้วย (3, 3) + "" + p 2 ด้วย (6, 4); Console.Write ("คุณต้องการแทน" + PersonData1 [noIndex] ชื่อ + "ของผู้ติดต่อ" + p1 + "กับ" + +Environment.NewLine+ p 2 " ('y' สำหรับใช่ แป้นใด ๆ เพื่อยกเลิก) หรือไม่?: "); สตริ checkR = Console.ReadLine() ถ้า ("yY" Contains(checkR)) { แทนที่เบอร์โทรศัพท์ PhoneData ph1 = PhoneData() ใหม่ ph1.no = no ph1 PhoneNumber = x.Trim() ph1.phoneOrder = phoneN PhoneData1 [เจ] = ph1 PhoneData ph2 = PhoneData() ใหม่ ph2.no = no ph2 PhoneNumber = pp1 ph2.phoneOrder = phoneN เอาตารางแฮชเกี่ยวกับโทรศัพท์ที่ไม่ DeleteHashTable(ph2) แทรกตารางแฮใหม่ของโทรศัพท์นี้ไม่ InsertHashTable(ph1) } } อื่น { ใส่โทรศัพท์ไม่ในตำแหน่งถัดไป PhoneData ph = PhoneData() ใหม่ ph PhoneNumber = x ph.no = no
การแปล กรุณารอสักครู่..

namespace Hw1_Hashing {โปรแกรมเรียนสาธารณะ{คงที่รายชื่อ
PhoneData1 = รายชื่อใหม่(); // ArrayList
สำหรับหมายเลขโทรศัพท์คงที่รายชื่อ PersonData1 = รายชื่อใหม่(); // ArrayList
คนคงแฮHashtable = Hashtable ใหม่ ();
เส้นทางสตริงคงที่ = @ "PhoneBook1.txt"; เป็นโมฆะคง main (String args []) {ลอง{readData (); x ถ่าน; บูล isExit = false; สิ่งที่ต้องทำ{Console.Write ("สมุดโทรศัพท์ - การป้อนคำสั่งของคุณ (h เพื่อขอความช่วยเหลือ):"); มสตริง = Console.ReadLine (); x = char.ToLower (ม [0]); สวิทช์ (x) {กรณี 'i' : แทรก(); // บำบัดใส่หมายเลขโทรศัพท์แบ่ง; กรณี 'D': ลบ (); // ลบหมายเลขโทรศัพท์แบ่ง; กรณี 'M': ปรับเปลี่ยน (); // แก้ไขแบ่ง; กรณีของ ': {การค้นหา (); // โทรศัพท์ค้นหาไม่แบ่ง;} กรณี 'x': {isExit = true; // เขียนข้อมูลไปยัง textfiles writeData (); แบ่ง;} กรณี 'เอช': {ความช่วยเหลือ (); แบ่ง;} ค่าเริ่มต้น: แบ่ง;}} ในขณะที่ (isExit!);} catch (ยกเว้นอดีต) {Console.WriteLine ("ข้อผิดพลาดโปรแกรม:" + ex.Message); Console.Read ();}} แทรกโมฆะคงที่ () {บูลเมตร = false; สตริง x = string.Empty; สตริง newList = "รายการใหม่คือ" ทำ{Console.Write ("ป้อนหมายเลขโทรศัพท์ที่จะแทรก:"); x = Console.ReadLine (); x = x.Trim (); int Y = x.Length; ถ้า (y> 10) Console.WriteLine ("ข้อผิดพลาด - จำนวนยาวเกินไป"); อื่นถ้า (y <10) Console.WriteLine ("ข้อผิดพลาด - จำนวนสั้นเกินไป"); อื่น{เมตร = true; foreach (รายการ PhoneData ใน PhoneData1) {if (String.Compare (item.PhoneNumber, x) == 0) {Console.WriteLine ("ข้อผิดพลาด - หมายเลขโทรศัพท์ที่มีอยู่แล้วในสมุดโทรศัพท์นี้."); ม. = false;}}}} ในขณะที่ (เมตร == เท็จ); Console.WriteLine ("รายการคือ:"); showList (null); // แสดงสำหรับการป้อนข้อมูลใส่คนใหม่หรือไม่Console.Write ("ใส่ รหัสคนที่จะผนวกหมายเลขโทรศัพท์หรือ 'n' สำหรับหมายเลขโทรศัพท์ใหม่: "); สตริง inputNP = Console.ReadLine (); int ไม่มี; // ถ้ามันคนใหม่ถ้า(" nN ".Contains (inputNP)) {คอนโซล.Write ("ป้อนชื่อ (8 ตัวอักษรสูงสุด):"); สตริง inputName = Console.ReadLine (); ในขณะที่ (inputName.Length> 8) {Console.Write ("ชื่อเป็นข้อผิดพลาดที่ 8 ตัวละครโปรดใส่ใหม่ ชื่อ: "); inputName = Console.ReadLine ();} // ใส่ชื่อใหม่PersonData p = PersonData ใหม่ (); p.PersonNo = PersonData1.Count + 1; p.Name = inputName; p.CountPhoneNo ++; PersonData1.Add (P); // ใส่โทรศัพท์มือถือใหม่ไม่มี ในรายการPhoneData ค่า pH = PhoneData ใหม่ (); ph.no = p.PersonNo; ph.PhoneNumber = x; ph.phoneOrder = 1; PhoneData1.Add (pH); // เพิ่มกุญแจสำคัญในการ Hashtable InsertHashTable (pH); // พิมพ์รายการใหม่Console.WriteLine (newList); showList (null);} อื่นถ้า (int.TryParse (inputNP ออกไม่ได้) == จริง) {int noindex = PersonData1.FindIndex (i => i.PersonNo == ไม่ได้) ; // การตรวจสอบมันเต็ม 5 โทรศัพท์ไม่มีบุคคลนั้น// ถ้ามันมีข้อผิดพลาดการแสดงเต็มรูปแบบและใส่แทนที่ไม่มีเปลี่ยนโทรศัพท์ว่าไม่มีถ้า(PersonData1 [noindex] .CountPhoneNo == 5) {Console.Write (PersonData1 [noindex ] .Name + "มี 5 หมายเลขโทรศัพท์แล้ว" + Environment.NewLine + "ใส่หมายเลขแทนที่หรือคีย์ใด ๆ สำหรับการยกเลิก:"); สตริง inputrc = Console.ReadLine (); int tryParseInputRC; // ถ้าไม่ยกเลิกแทนที่โทรศัพท์ที่ไม่มี กับอีกคนหนึ่งถ้า(int.TryParse (inputrc ออก tryParseInputRC)) {// แทนที่และลบที่สำคัญของโทรศัพท์ที่ไม่มี จากตารางแฮช// int indexperson = PersonData1.FindIndex (i => i.PersonNo == PersonData1 [ไม่มี] .PersonNo); PhoneData ค่า pH = ใหม่ PhoneData (); ph.no = ไม่; int indexphone = PhoneData1.FindIndex (i => i.phoneOrder == tryParseInputRC); ph.PhoneNumber = PhoneData1 [indexphone] .PhoneNumber; ph.phoneOrder = tryParseInputRC; PhoneData PH2 = PhoneData ใหม่ (); ph2.no = ph.no; ph2.PhoneNumber = x; PH2 .phoneOrder = ph.phoneOrder; PhoneData1 [indexphone] = PH2; // ลบข้อมูลตารางแฮชDeleteHashTable (pH); // แทรกตารางแฮชใหม่ข้อมูลInsertHashTable (PH2); // แสดงรายชื่อใหม่Console.WriteLine (newList); showList (null);}} อื่น{Console.Write ("ป้อนหมายเลขเปลี่ยนหรือ 'n' สำหรับหมายเลขโทรศัพท์ใหม่:"); สตริง inputPHID = Console.ReadLine (); if ("nN" .Contains (inputPHID)) {/ / เพิ่มหมายเลขโทรศัพท์ใหม่และตำแหน่งPhoneData ค่า pH = PhoneData ใหม่ (); ph.phoneOrder = PersonData1 [noindex] .CountPhoneNo + 1; ph.no = ไม่; ph.PhoneNumber = x; PhoneData1.Add (pH); PersonData1 [noindex ] .CountPhoneNo ++; // รายการโทรศัพท์เพิ่มขึ้นในคนint indexPer = PersonData1.FindIndex (i => i.PersonNo == ไม่มี); // โทรศัพท์แทรกไม่มีกัญชาตารางInsertHashTable (pH);} อื่น{int phoneN; บูล isNumberic = int.TryParse (inputPHID ออก phoneN); // ขอเปลี่ยนโทรศัพท์ no. ถ้า (phoneN <= PersonData1 [noindex] .CountPhoneNo && phoneN> 0) {int เจ = 0; สำหรับ (int i = 0; i <PhoneData1.Count; ฉัน ++) {if (PhoneData1 [ผม] .phoneOrder == phoneN && PhoneData1 [ผม] .no == ไม่ได้) {ญ = ฉัน; แบ่ง;}} PP1 สตริง; สตริง p1 = PhoneData1 [เจ] .PhoneNumber; PP1 = p1 ; p1 = p1.Substring (0, 3) + "" + p1.Substring (3, 3) + "" + p1.Substring (6, 4) สตริง p2 = x; p2 = p2.Substring (0, 3 ) + "" + p2.Substring (3, 3) + "" + p2.Substring (6, 4) Console.Write ("คุณต้องการที่จะเปลี่ยน" + PersonData1 [noindex] .Name + "ของการติดต่อ" + p1 + "ด้วย" + + p2 Environment.NewLine + "('Y' สำหรับใช่ปุ่มใด ๆ เพื่อยกเลิก):"); สตริง checkR = Console.ReadLine (); if ("YY" .Contains (checkR)) {// แทนที่โทรศัพท์ที่ไม่มี. PhoneData PH1 = ใหม่ PhoneData (); ph1.no = ไม่; ph1.PhoneNumber = x.Trim (); ph1.phoneOrder = phoneN; PhoneData1 [เจ] = PH1; PhoneData PH2 = PhoneData ใหม่ (); ph2.no = ไม่; ph2.PhoneNumber = PP1; ph2.phoneOrder = phoneN; // เอาตารางแฮชเกี่ยวกับโทรศัพท์ว่าไม่มี. DeleteHashTable (PH2); // แทรกตารางแฮชใหม่ของโทรศัพท์นี้ไม่มี. InsertHashTable (PH1 );}} อื่น{// โทรศัพท์แทรกในตำแหน่งต่อไปค่าpH = PhoneData PhoneData ใหม่ (); ph.PhoneNumber = x; ph.no = ไม่;
การแปล กรุณารอสักครู่..
